【问题标题】:spring security logout trigger弹簧安全注销触发器
【发布时间】:2012-12-18 16:26:16
【问题描述】:

我想从已登录用户的 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();

它返回给我匿名用户。那么如何获取已注销的用户详细信息。

如果您需要更多详细信息,请告诉我。

【问题讨论】:

    标签: spring-mvc spring-security


    【解决方案1】:

    org.springframework.security.web.authentication.logout.LogoutSuccessHandler 接口的实现作为 bean 添加到您的安全上下文中。

    然后就可以使用了:

    <logout success-handler-ref="yourLogoutSuccessHandler" />
    

    编辑。 正如 Marcel 所述,此解决方案无法开箱即用,因为您不能混合 success-handler-reflogout-success-url 属性 (reference) .我更喜欢稍微不同的解决方案:您可以使用组合而不是继承:

    1. SimpleUrlLogoutSuccessHandler bean 准备配置。
    2. 通过相应的defaultTargetUrl属性设置logout-success-url
    3. 使用 LogoutSuccessHandler 接口将 SimpleUrlLogoutSuccessHandler bean 注入到您的 CustomUrlLogoutSuccessHandler 中,并在完成操作后调用它。

    优点是您将减少与框架代码的耦合。所以在从 Spring Security 3.1 迁移到 Spring Security Y.Y 的情况下你会遇到更少的问题

    【讨论】:

      【解决方案2】:

      关于LogoutSuccessHandler 的提示是正确的。但是,如果我没记错的话,您必须考虑配置success-handler-reflogout-success-url 是互斥的。因此,您需要在成功处理程序中手动实现对 URL 的转发。指针:https://stackoverflow.com/a/6770785/131929

      【讨论】:

      • 好点。我的答案已根据您的提示进行了更新。谢谢!
      【解决方案3】:
      Authentication authentication = SecurityContextHolder.getContext().getAuthentication()
      authentication.getName()
      

      【讨论】:

        【解决方案4】:

        在您的 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 接口的类,并在它的注销方法中执行注销时所需的所有操作。

        【讨论】:

          猜你喜欢
          • 2016-11-22
          • 1970-01-01
          • 2011-08-09
          • 2012-10-05
          • 2012-08-04
          • 1970-01-01
          • 2023-01-03
          • 2018-09-08
          • 1970-01-01
          相关资源
          最近更新 更多