3

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

4

3 回答 3

3

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

  1. 在管理控制台中,单击安全性 > 全局安全性。
  2. 在自定义属性下,单击新建。
  3. 在名称字段中,输入 com.ibm.ws.security.web.logoutOnHTTPSessionExpire。
  4. 在值字段中,输入 true。
  5. 单击应用并保存以保存对配置的更改。
  6. 重新同步并重新启动服务器。
于 2012-05-04T09:09:18.027 回答
3

除了 Vadim 提供的解决方案之外,我还想分享两个链接,这些链接描述了几种替代解决方法,并解释了导致这种看似违反直觉的操作模式的机制。

如果您在不同的应用程序之间使用 SSO(单点登录),使用 com.ibm.ws.security.web.logoutOnHTTPSessionExpire=true 设置可能会有一点缺点。此设置实质上使 LTPA 令牌无效。由于服务器上的安全缓存在超时时会从 LTPA 令牌刷新,因此无效的 LTPA 将导致用户重新验证(登录)其余应用程序 [1]。

对 [2] 中的问题 9(似乎与我们的问题相同)的回答提供了针对此问题的两种替代解决方法的想法,您可以使用基于生存期和不活动的 servlet 过滤器来超时身份验证。

[1]:安全缓存、LTPA 令牌和会话超时(需要登录)

[2]:问答:关于 WebSphere Application Server 安全性的常见问题

于 2012-05-06T15:15:32.957 回答
2

要记住的关键是有效/无效的 HTTPSession 与 security 不同

它们完全不同。

一旦你通过了服务器的身份验证,如果你愿意,你仍然可以在没有任何 HTTPSession 的情况下让应用程序工作。

一旦您被服务器验证,您将获得一个 LTPA 令牌返回到您的浏览器,并且 LTPA 令牌在 2 小时内处于活动状态(这是默认设置)。

如果您的 HTTP 会话过期,如果您不做任何额外的事情,这不会影响 LTPA 令牌。

您可以尝试: ibm_security_logout 这会使 LTPA 令牌无效。

我猜想对于更高版本的 Servlet API,我们确实有一个适当的注销操作可用,这将消除对此的需要。

高温高压

芒鲁

于 2012-04-30T23:46:34.620 回答