Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring:如何在注销呼叫时获取用户名_Java_Spring_Session_Httpsession - Fatal编程技术网

Java Spring:如何在注销呼叫时获取用户名

Java Spring:如何在注销呼叫时获取用户名,java,spring,session,httpsession,Java,Spring,Session,Httpsession,我有以下控制器用于注销我想获得注销用户的姓名我如何才能实现这一点 stringusername=(String)session.getAttribute(“名称”) 这条线坏了 注销控制器 @RequestMapping(value = "/session", method = RequestMethod.DELETE) public @ResponseBody ResponseEntity<?> logout(HttpSession session){ S

我有以下控制器用于注销我想获得注销用户的姓名我如何才能实现这一点

stringusername=(String)session.getAttribute(“名称”)
这条线坏了

注销控制器

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

    } 
@RequestMapping(value=“/session”,method=RequestMethod.DELETE)
public@ResponseBody ResponseEntity注销(HttpSession会话){
字符串用户名=(字符串)session.getAttribute(“名称”);
System.out.println(“名称:”+用户名);
session.invalidate();
返回ResponseEntity.ok(“用户注销”);
} 

我目前附近没有任何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());
    }
}
}    
@组件
公共类LogoutListener实现
应用程序侦听器{
专用静态最终记录器=
LoggerFactory.getLogger(LogoutListener.class);
@凌驾
Application event(SessionDestroyeEvent事件)上的公共无效{
列表lstSecurityContext=
event.getSecurityContext();
用户详细信息;
用于(SecurityContext SecurityContext:lstSecurityContext)
{
ud=(用户详细信息)
securityContext.getAuthentication().getPrincipal();
info(“注销|会话已销毁用户:[{}]”,
ud.getUsername());
}
}
}    

请参见上面的答案,这更简单