java过滤器给Cookie加上HttpOnly属性
网上撸下来的代码登录不了…
公司安全扫描出的漏洞之一,看到的第一步就是各种百度,但是简单复制粘贴过来的代码连登录都登录不上了… 尴尬;然后发现貌似cookie的Name和value没有对应上,需要改一点点…
而且原代码的doFilter(request, response)在cookies!=null里边的,导致wsdl接口全部调不通…
直接贴代码片
/**
* 执行过滤,设定cookie为HttpOnly
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
// TODO Auto-generated method stub
//转为HttpServletResponse来addHeader
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
Cookie[] cookies = req.getCookies();
if(cookies!=null){
for(Cookie cookie : cookies){
StringBuilder builder = new StringBuilder();
/*将cookie拼凑起来,网上那一步不能登录,是name写死了...*/
builder.append(cookie.getName() +"=" + cookie.getValue() + "; ");
builder.append("Secure; ");
builder.append("HttpOnly; ");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, 1);
Date date = cal.getTime();
Locale locale = Locale.CHINA;
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss",locale);
builder.append("Expires=" + sdf.format(date));
//System.out.println("Set-Cookie="+builder.toString());
resp.addHeader("Set-Cookie", builder.toString());
}
}
//这个要写在外面,不然没有cookies的请求会传不过去
filterChain.doFilter(request, response);
}
希望安全扫描改的东西能全部通过啊…
小白无力…
后续
这个过滤器真是坑啊,在老ie6下面登录不上… 后台会set-cookie,过滤器也会set-cookie一次,2个值还不一样… 结果就是GG了… 不知道为什么360的兼容模式和其他浏览器还是可以的…
暂时先加了个header提高兼容性。
resp.setHeader(“P3P”,“CP=CAO PSA OUR”);
把"JSESSIONID".equals(cookie.getName())的剔出来单独处理。