java - getSession() 总是创建一个新 session

标签 java session web.xml servlet-filters

我们通过实现 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() 返回一个 session (如果存在),否则它会创建一个新 session 。但在我们的应用程序中,request.getSession() 总是为每个 REST 调用创建一个新 session 。这里可能出了什么问题?

最佳答案

如果您的应用程序设置设置为通过 cookie 跟踪 JSESSIONID,则如果您从同一浏览器发出请求,应用程序将返回相同的 session ,如果您从不同的浏览器发出请求,则应用程序将返回一个新 session 。这显然是因为 cookie 存在于每个浏览器的基础上。

关于java - getSession() 总是创建一个新 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23007445/

相关文章:

glassfish - 如何指定默认的 glassfish-web.xml?

java - 向 Glassfish 服务器添加过滤器

java - 有谁知道包含 java 中所有本地化国家/地区名称的库?

java - 是否有 Java 实用程序可以对两个对象进行深入比较?

java - 无法使用 Apache POI 读取 xls 文件的单元格颜色

node.js - NGINX : How to have sticky session with least connected

java - j2ee session 迁移和 session 复制

java - 为什么反转循环会使它变慢?

asp.net-mvc - 如何在 ASP.NET 中使用带有自定义 session key 参数的 session

java - 上下文参数在 web.xml 中使用