我有一个具有相位侦听器的 Web 应用程序。当阶段监听器运行时,它会对会话映射做一些事情。随机(通常不是第一个请求,但在快速发出请求时更频繁)我从 SessionMap.put 得到一个空指针异常。经过一番挖掘,似乎当 SessionMap.put 获取会话时,它返回了一个空指针(即使它调用了 getSession(true))。所以我做了一些调试,发现确实 getSession 和 getRequestedSessionId 在调用时都返回 null 。但是,如果您检查请求中的 cookie (request.getCookies()),则 JSESSIONID cookie 包含在请求中并具有正确的会话。没有 关于为什么会话和请求的会话 id 有时会恢复正常,有时会返回 null,这似乎是押韵或原因。这里唯一可能相关的另一条信息是 JSF 页面与一些较旧的 JSP/Servlet 所在的应用程序相同。
我在网上环顾四周,其他人说将 cookie 路径设置为“/”已经为他们解决了类似的问题,但似乎并没有解决这里的问题。