在我们的vaadin Web应用程序中,当LTPA令牌过期时,我们会收到UnauthorizedSessionRequestException。之后应用程序不再响应。即使会话未处于非活动状态且用户执行了某些操作,LTPA令牌也会过期。我们的生产服务器上的LTPA令牌超时设置为120分钟。但我可以在我的本地计算机上测试它,并在我的Web Sphere Liberty Profile中超时1分钟来理解问题。
这是德语中异常的堆栈跟踪:
[ERROR ] SESN0008E: Ein als anonymous authentifizierter Benutzer hat versucht, auf eine Sitzung zuzugreifen, deren Eigner user:BasicRegistry/ksc ist.
[ERROR ] SRVE0777E: Es wurde eine Ausnahme von der Anwendungsklasse 'com.vaadin.server.VaadinServlet.service:240' ausgelöst.
javax.servlet.ServletException: com.vaadin.server.ServiceException: com.ibm.websphere.servlet.session.UnauthorizedSessionRequestException: SESN0008E: Ein als anonymous authentifizierter Benutzer hat versucht, auf eine Sitzung zuzugreifen, deren Eigner user:BasicRegistry/ksc ist.
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:240)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1240)
at [internal classes]
英文
A user authenticated as anonymous has attempted to access a session owned by user
答案 0 :(得分:2)
LTPA令牌与会话的工作方式完全不同。
当创建LTPA令牌时,它将在一段时间内有效,在LTPA令牌超时(在您的情况下为120分钟)中设置。虽然会在您创建服务器的每个请求上延长会话超时,但LTPA令牌超时却没有。即使向服务器发出后续请求,令牌也将保持其原始超时时间。
还有另一个设置控制何时应该扩展LTPA令牌。此设置称为cacheCushionMax,其默认值为三分钟。这意味着如果剩余的时间少于此值,则LTPA令牌将仅在请求时刷新。如果在LTPA令牌到期之前有超过三分钟的时间,它将保持旧的超时时间。
要更改此值:
我发现的最佳资源是IBM support page。它虽旧但仍然有效。我所写的内容也在更详细的场景中进行了解释,特别是在"可能的最短有效期限"
部分。答案 1 :(得分:0)
查找我,好像URI在WebSphere中不受保护。 WebSphere缺省值已发生一些变化。我希望配置告诉WebSphere在LTPAToken可用时立即建立安全上下文,即使在未受保护的URL上也是如此。在这种情况下,未受保护的URL将获得安全上下文,就像它们使用Web.xml中定义的security_constraint一样。 如果现在LTPA令牌无效且HTTPSession仍然有效(请记住,HTTPSession是基于活动的,而不是LTPA令牌固定时间),WebSphere现在看到访问Session时发生了违规。已添加此项以防止会话劫持攻击。 您可以禁用此功能,并且HTTP容器上有一些自定义属性。我不建议将其关闭,但如果您的应用程序对于使用相同上下文/ servlet路径的经过身份验证且未经过身份验证的用户可访问,则需要更多重新考虑