【问题标题】:How do I logout from Java EE container managed security?如何从 Java EE 容器管理的安全性中注销?
【发布时间】:2010-09-02 15:49:14
【问题描述】:

我在 websphere 7.0 中工作。我使用来自应用程序服务器的安全性。我想删除与用户的关联,因此在访问安全资源之前将用户重定向到登录页面(并且 request.getUserPrincipal() 返回 null)。

我试试:

request.getSession().invalidate();

但用户主体仍然关联。

如何删除该关联?

【问题讨论】:

  • 是否可以选择将客户端重定向 HTTP 302 发送到注销 url?这可以使用 Javascript 或操作 HTTP 响应标头来完成。
  • 如何在客户端进行身份验证之前将其重定向到登录页面?是否有过滤器检查请求是否有 UserPrincipal?
  • 我在 web.xml 中使用 java 安全配置,servlet 容器将对受保护资源的访问重定向到登录页面。

标签: java servlets websphere logout


【解决方案1】:

在 websphere 上,必须使用特殊的注销表单调用:

http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/tsec_pofolo.html

这是我正在使用的:

<body onload="javascript:document.logout.submit()">
    <h2>Sample Form Logout</h2>
    <form METHOD=POST ACTION="ibm_security_logout" NAME="logout">
    Click this button to log out:
    <input type="submit" name="logout" value="Logout">
    <INPUT TYPE="HIDDEN" name="logoutExitPage" VALUE="/some url">
    </form>
</body>

【讨论】:

  • 不,它必须不。根据文档,这只是一种方便的注销方式,无需使“整个”会话无效。
  • 无效会话不起作用,用户主体仍然存在。如果您有更好的方法,我想知道。
  • ibm_security_logout 不仅仅是使会话无效的快捷方式,它还执行以下操作: 1. 清除轻量级第三方认证 (LTPA) / 单点登录 (SSO) cookie 2. 使 HTTP 会话无效 3 . 从身份验证缓存中删除用户。即使您的会话在调用 HttpSession#invalidate() 时无效,这也是不够的。您的 LTPA cookie 仍然有效,允许您使用 SSO 访问应用程序而无需登录,这就是您必须调用 ibm_security_logout 的原因。
  • 请注意,“清除 LTPA SSO cookie”操作仅将标记为过期的 SSO cookie 发送回客户端浏览器,因此删除 cookie 是浏览器的责任。 IBM 不会使 SSO cookie 无效,因为它们可以在其他应用程序中使用。
  • 对我来说,这只是转到 myUrl.com/ibm_security_logout 这当然不存在并给出错误:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 2016-08-15
相关资源
最近更新 更多