2017-09-28 37 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