【问题标题】:request.getUserPrincipal() is still not null after session is invalidated会话失效后 request.getUserPrincipal() 仍然不为空
【发布时间】:2012-04-26 13:45:36
【问题描述】:

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

【问题讨论】:

    标签: java websphere session-timeout principal


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      除了 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

      【讨论】:

        【解决方案3】:

        要记住的关键是有效/无效的 HTTPSession 与安全性不同

        它们完全不同。

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

        一旦服务器对您进行身份验证,您会收到一个 LTPA 令牌返回到您的浏览器,并且 LTPA 令牌会在 2 小时内处于活动状态(这是默认设置)。

        如果您的 HTTP 会话过期,如果您不进行任何额外操作,则不会影响 LTPA 令牌。

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

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

        HTH

        芒露

        【讨论】:

          猜你喜欢
          • 2014-05-21
          • 1970-01-01
          • 1970-01-01
          • 2023-04-10
          • 1970-01-01
          • 2021-03-14
          • 1970-01-01
          • 1970-01-01
          • 2021-03-14
          相关资源
          最近更新 更多