Tomcat下如何利用过滤器来完成对cookie添加httponly或secure标识

httponly和secure两个标识是现代化浏览器对cookie安全保护的一大举措,我们来简单看下其作用。httponly是为了防护xss对cookie的劫持,在通用的攻击场景中,通过植入xss来劫持到管理者或用户的cookie,然后绕过应用的账户管控措施进入到操作页面完成非法的操作。secure是为了解决https与http间的问题,http是一种透明的传输,也就是说能看到明文,而https是具有加密的,secure的设置正是声明仅跟随https的请求,不答理http。

Tomcat下有一种好的通用解决措施就是过滤器来操作,举例如下,具体的业务情况请自行调整。

private void rewriteCookieToHeader(HttpServletRequest request, HttpServletResponse response) {
    if (response.containsHeader("SET-COOKIE")) {
        String sessionid = request.getSession().getId();
        String contextPath = request.getContextPath();
        String secure = "";
        if (request.isSecure()) {
            secure = "; Secure"; 
        }
        response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid
                         + "; Path=" + contextPath + "; HttpOnly" + secure);
    }
}

我们需要明白的是,使用request.isSecure()并不总是准确的,考虑到负载均衡技术为执行SSL加速,请求从浏览器到负载均衡器过来是HTTPS,而负载均衡器和实际服务器之间的请求可能会通过普通HTTP。这将导致request.isSecure()是假的,而浏览器确实使用SSL。

相关推荐:
先来聊聊为何会有这一么一回事。 在默认的部署下,可以直接通过DNS解析到部署的生产环境下,然后你的域名就能直接访问你的应用了,然后问题来了。你发现你使用域名或是直接IP均能访问到你的应用,这会产生 …
安装完tomcat8.x后,进入其目录/usr/local/tomcat/bin/,运行startup.sh,出现错误: touch: cannot touch ‘/usr/local/tomcat8/logs/catalina.out’:No such file or directory 其解决办法如下: 1.自己建 …
在 Linux 中为了安全起见,小于1024的端口都归root用户所有,其他用户没有使用这些端口的权限。 因此大量的新手或粗心的运维就会遇到伤害了。怎么解决呢?有两种方式,一种是用 root 账户来执行,另一种就 …
异常详细信息: System.Web.HttpException: 无法向会话状态服务器发出会话状态请求。请确保已启动 ASP.NET State service,并且客户端和服务器端口是相同的。如果服务器位于远程计算机上,请检查 HKEY_LOCAL …
<Server port="8005" shutdown="SHUTDOWN"> <!--属性说明 port:指定一个端口,这个端口负责监听关闭Tomcat的请求 shutdown:向以上端口发送的关闭服务器的命令字符串 --> <Listener classNam …
拿起手机扫一扫即可带走我!