2017-09-28 39 views
0

我有以下用于登出的控制器我想获得登出用户的名字,我该如何实现这一目标?春季:如何获取登出电话的用户名

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"); 

    } 

回答

1

我目前没有任何Spring项目在我身边,但我记得,它可能是能够做到像这样:

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

正如我所说,我不知道它是否工作。自从我上次使用Spring以来已经有一段时间了,但是让我知道它是否是。

+0

它的工作! Thankyou – SFAH

0

试试这个。

@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()); 
    } 
} 
}  
+0

请看上面回答它更容易 – SFAH

+0

但谢谢你的帮助:') – SFAH