我想从登录用户的Hashmap中删除已注销的用户,但是当我按下注销链接时,我找不到这样做的方法。它只是重定向到登录页面。
在春季安全我有
<logout invalidate-session="true"
logout-success-url="/"
logout-url="/logout.htm"/>
注销链接就像
<a href="logout.htm">Logout</a>
当我按下此链接时,它会转到我的登录映射
@RequestMapping("login")
public ModelAndView login(){}
当我尝试使用
获取用户详细信息时 SecurityContextHolder.getContext()
.getAuthentication().getPrincipal();
它会让我回复匿名用户。那么如何才能获得已注销的用户详细信息。
如果您需要更多详细信息,请与我们联系。
答案 0 :(得分:3)
将 org.springframework.security.web.authentication.logout.LogoutSuccessHandler 接口的实现添加为安全上下文。
然后你可以使用它:
<logout success-handler-ref="yourLogoutSuccessHandler" />
修改强> 正如Marcel所提到的,这个解决方案不会开箱即用,因为你不能混合 success-handler-ref 和 logout-success-url 属性({{3} })。我更喜欢稍微不同的解决方案:您可以使用合成:
而不是继承优点是您将更少地使用框架代码。因此,在从Spring Security 3.1迁移到Spring Security Y.Y
的情况下,您将遇到的问题更少答案 1 :(得分:2)
关于LogoutSuccessHandler
的提示是正确的。但是,如果我没有弄错的话,你必须考虑配置success-handler-ref
和logout-success-url
是互斥的。因此,您需要在成功处理程序中手动实现转发到URL。指针:https://stackoverflow.com/a/6770785/131929
答案 2 :(得分:0)
Authentication authentication = SecurityContextHolder.getContext().getAuthentication()
authentication.getName()
答案 3 :(得分:0)
在applicationContext-security.xml文件中添加如下所示的成功处理程序
< logout logout-url="/resources/j_spring_security_logout" success-handler-ref="com.mycompany.security.SpringSecurityLogoutHandler" />
创建将要实现org.springframework.security.web.authentication.logout.LogoutHandler
接口的类,并在其注销方法中执行注销时所需的所有内容。