通过实现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调用创建一个新会话。这里可能出什么问题了?

最佳答案

如果您的应用程序设置被设置为通过cookie跟踪JSESSIONID,那么如果您从同一浏览器发出请求,则该应用程序将返回相同的会话,如果您是从其他浏览器发出请求,则该应用程序将返回新的会话。这显然是因为cookie是基于每个浏览器而存在的。

09-10 06:38