我在websphere应用服务器7.0上部署了Web应用程序。用户登录使用/ j_security_check。会话超时发生会话ivnvalidates但request.getUserPrincipal()仍然不为null。我希望它应该为null。如何清理用户主体?
答案 0 :(得分:3)
我在球体文档中找到了解决方案。
答案 1 :(得分:3)
除了Vadim提供的解决方案之外,我还想分享两个描述两种替代解决方案的链接,以及导致这种看似反直觉操作模式的机制的解释。
如果您在不同的应用程序之间使用SSO(单点登录),则使用com.ibm.ws.security.web.logoutOnHTTPSessionExpire = true设置可能会有一些缺点。此设置实质上使LTPA令牌无效。由于服务器上的安全缓存在超时时从LTPA令牌刷新,因此无效的LTPA将导致用户对剩余应用程序进行重新验证(登录)[1]。
在[2]中对问题9(似乎与我们的问题相同)的回答提供了针对此问题的两种替代解决方法的想法,其中您可以使用基于生命周期和不活动的servlet过滤器进行身份验证。
[1]:Security Cache, LTPA Token, and Session Time Outs(需要登录)
[2]:Q & A: Frequently asked questions about WebSphere Application Server security
答案 2 :(得分:2)
要记住的关键是有效/无效的HTTPSession与安全性 不同。
他们完全不同。
一旦您通过服务器进行身份验证,如果您愿意,您仍然可以在没有任何HTTPSession的情况下运行应用程序。
一旦您通过服务器进行了身份验证,您就会获得一个LTPA令牌返回到您的浏览器,并且LTPA令牌在2小时内处于活动状态(这是默认值)。
如果您的HTTP会话过期但不会影响LTPA令牌,如果您不需要额外的任何内容。
您可以尝试:ibm_security_logout,这会使LTPA令牌无效。
我想使用更高版本的Servlet API,我们可以使用正确的注销操作,这样就不需要了。
HTH
Manglu