为了解决与cookie相关的漏洞,我在一个过滤器中编写了请求和响应的包装器。 在请求包装器中,我使用getSession方法中的以下代码覆盖cookie(重写)
HttpSession session = getHttpServletRequest().getSession(false);
String value="JSESSIONID=" + session.getId() +"; Path="+getHttpServletRequest().getContextPath()+"/";
((HttpServletResponse)response).setHeader("Set-Cookie",value);
在响应过滤器中,我已经覆盖了addCookie和addHeader方法来执行相同操作。
上面的代码适用于tomcat和jboss,但它在websphere 8.5上存在问题。
对于websphere 8.5,它在getSession方法getHttpServletRequest().getSession(false)
当我检查来自浏览器开发者工具的网络流量时,对于websphere,我发现在响应中添加了多个cookie(一个是我们添加的,另一个是由服务器添加的),为了避免这种情况,我已经在websphere会话管理中设置了禁用曲奇饼干。这解决了多个cookie问题,但空会话问题仍然存在。
如何解决这个问题?
由于
答案 0 :(得分:0)
您的代码中不应该有一个明确的“false”参数,您应该传递您的包装器传递的内容。您可能会破坏传递true的呼叫者,因此无法正确建立新会话。
您也可能会破坏会话亲缘关系,因为您没有复制会话ID后面的cloneID。
为什么不在配置中设置cookie路径,如果你打算改变它?