我们的应用程序中通过实现Filter来安装SecurityFilter类,我们的doFilter方法如下所示。
public void doFilter(ServletRequest sres, ServletResponse sreq,
FilterChain chain) throws IOException, ServletException {
LOGGER.debug(Logger.buildLogMessage("Starting SecurityFilter.doFilter"));
HttpServletRequest request = (HttpServletRequest) sres;
HttpServletResponse response = (HttpServletResponse) sreq;
HttpSession session = request.getSession();
我们的web.xml中有以下条目
<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>com.a.b.c.web.filter.SecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/resources/*</url-pattern>
</filter-mapping>
我们对应用程序进行了很多REST调用,所有这些调用都通过了这个过滤器。 Java API文档说,request.getSession()返回会话(如果存在),否则会创建新会话。但是在我们的应用程序中,request.getSession()总是为每个REST调用创建一个新会话。这可能会出错?
答案 0 :(得分:0)
如果您的应用程序设置设置为通过cookie跟踪JSESSIONID,则如果您从同一浏览器发出请求,则应用程序将返回相同的会话,如果您正在从以下位置发出请求,则会返回新会话不同的浏览器。这显然是因为cookie基于每个浏览器生存。