我需要限制对包含会话令牌的cookie的访问权限,以便javascript无法访问它。 给出的建议是在cookie上设置Secure和HttpOnly标志。
使用@ResponseBody时我没有设置cookie,所以我在HandlerInterceptor中设置了cookie。
public class COOKIEFilter implements org.springframework.web.servlet.HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
Cookie cookie = new Cookie("timestamp", new Long(new Date().getTime()).toString());
cookie.setSecure(true);
// how do I set the http-only flag?
httpServletResponse.addCookie(cookie);
return true;
}
如Chrome控制台所示,安装已设置,但不是HTTP
我已经尝试在servlet 3.0 sepcification下向web.xml添加参数,允许在会话cookie上设置安全和http-only,但是因为我需要自己处理会话(Spring MVC应用程序需要保持无状态) ,这对我不起作用。
更新
我正在使用Tomcat7,目前使用的是Servlet 2.5和Spring 3.2.8。
答案 0 :(得分:4)
可以将其设置为cookie.setHttpOnly(true)
,就像安全一样。
答案 1 :(得分:1)
您需要将HttpOnly
设置如下:
Cookie cookie = new Cookie("timestamp", new Long(new Date().getTime()).toString() + ";HttpOnly");
需要遵循cookieName=cookieValue;HttpOnly;Secure
格式
答案 2 :(得分:-1)
替换:
Cookie cookie = new Cookie("timestamp", new Long(new Date().getTime()).toString());
以下
Cookie cookie = new Cookie("timestamp", new Long(new Date().getTime()).toString()+";HttpOnly");
这可能有用。