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());
}
}
}
我有以下用于注销的控制器我想获取注销用户的名称我该如何实现?
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());
}
}
}