会话失效后,request.getUserPrincipal()仍然不为空

时间:2012-04-26 13:45:36

标签: java websphere session-timeout principal

我在websphere应用服务器7.0上部署了Web应用程序。用户登录使用/ j_security_check。会话超时发生会话ivnvalidates但request.getUserPrincipal()仍然不为null。我希望它应该为null。如何清理用户主体?

3 个答案:

答案 0 :(得分:3)

我在球体文档中找到了解决方案。

  1. 在管理控制台中,点击安全>全球安全。
  2. 在自定义属性下,单击新建。
  3. 在名称字段中,输入com.ibm.ws.security.web.logoutOnHTTPSessionExpire。
  4. 在值字段中,输入true。
  5. 单击“应用”和“保存”以保存对配置的更改。
  6. 重新同步并重新启动服务器。

答案 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