【问题标题】:Spring : How to get the username on logout callSpring:如何在注销呼叫时获取用户名
【发布时间】:2017-09-28 14:57:49
【问题描述】:

我有以下用于注销的控制器我想获取注销用户的名称我怎样才能做到这一点?

String userName=(String)session.getAttribute("name"); 这行不行

注销控制器

@RequestMapping(value = "/session", method = RequestMethod.DELETE)
    public @ResponseBody ResponseEntity<?> logout(HttpSession session){

        String userName=(String)session.getAttribute("name");
        System.out.println("name: " + userName);
        session.invalidate();
        return ResponseEntity.ok("user logged out");

    } 

【问题讨论】:

    标签: java spring session httpsession


    【解决方案1】:

    目前我附近没有任何 Spring 项目,但我记得,可以这样做:

    SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    

    正如我所说,我不确定它是否有效。自从我上次使用 Spring 以来已经有一段时间了,但如果是,请告诉我。

    【讨论】:

      【解决方案2】:

      试试这个。

      @Component
      public class LogoutListener implements 
      ApplicationListener<SessionDestroyedEvent> {
      
      private static final Logger logger = 
      LoggerFactory.getLogger(LogoutListener.class);
      
      @Override
      public void onApplicationEvent(SessionDestroyedEvent event) {
          List<SecurityContext> lstSecurityContext = 
      event.getSecurityContexts();
          UserDetails ud;
          for (SecurityContext securityContext : lstSecurityContext)
          {
              ud = (UserDetails) 
      securityContext.getAuthentication().getPrincipal();
              logger.info("Logout|Session destroyed User: [{}]", 
      ud.getUsername());
          }
      }
      }    
      

      【讨论】:

      • 请看上面的答案更容易
      猜你喜欢
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2020-07-26
      • 1970-01-01
      • 2021-02-06
      • 2018-02-15
      相关资源
      最近更新 更多