Spring : 如何在注销调用时获取用户名

Spring : How to get the username on logout call

我有以下用于注销的控制器我想获取注销用户的名称我该如何实现?

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

    } 

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

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

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

试试这个。

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