在Spring MVC Controller中创建的cookie上设置http-only

时间:2015-04-02 06:01:08

标签: java spring spring-mvc cookies

我需要限制对包含会话令牌的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

Showing that secure flag is being set

我已经尝试在servlet 3.0 sepcification下向web.xml添加参数,允许在会话cookie上设置安全和http-only,但是因为我需要自己处理会话(Spring MVC应用程序需要保持无状态) ,这对我不起作用。

更新

我正在使用Tomcat7,目前使用的是Servlet 2.5和Spring 3.2.8。

3 个答案:

答案 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");

这可能有用。