0

这是大图

我想将“HttpOnly”附加到 JSESSIONID Cookie,但我想手动执行此操作,这意味着:

//create a new cookie
StringBuilder updatedCookie = new StringBuilder("JSESSIONID").append("=")
                .append(sessionId).append("; Path=").append("/")
                .append("; HttpOnly");

//save the cookie
response.setHeader("SET-COOKIE", updatedCookie.toString());

这是在映射到所有站点的 Servlet 过滤器中完成的(过滤器的 url 模式为“/*”)

  1. 我怎样才能让这个过滤器只运行一次?也就是说,在登录时,或
  2. 我真的必须在每个请求时运行并检查此 cookie 是否已被标记,如果答案为“是”则跳过?

有什么建议么 ?

PS:

  1. 不要告诉我升级到 Servlet 3.0,因为我现在不能这样做
  2. 忽略StringBuilder的不当使用和缺少变量sessionId
4

1 回答 1

1

我怎样才能让这个过滤器只运行一次?也就是说,在登录时

不可能。会话可能已经预先创建。

理论上,你最好的地方是HttpSessionListener#sessionCreated(),但这不会HttpServletResponse以任何方式向你提供对象,所以你迷路了。

我真的必须在每个请求时运行并检查此 cookie 是否已被标记,如果答案为“是”则跳过?

是的。然而,这应该特别便宜。

于 2011-01-19T16:46:39.897 回答