如何在 Spring Boot 中从 HttpSessionEvent 中检索主体信息?
How to retrieve principal information from HttpSessionEvent in Spring Boot?
我正在使用 javax.servlet.http.HttpSessionListener
class 来监听我的 Spring 引导应用程序中的会话更改
public interface HttpSessionListener extends EventListener {
default void sessionCreated(HttpSessionEvent se) {
}
default void sessionDestroyed(HttpSessionEvent se) {
}
}
问题是,如何从 HttpSessionEvent
中检索用户信息?
我想在会话销毁后删除用户上传的所有文件,所以我至少需要他的ID
您可以通过 httpEvent 对象获取会话,并从会话中获取当前用户信息
se.getSession()
默认情况下,Spring 安全性将 SecurityContext
存储在由 HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY
定义的密钥下的会话中。所以,如果用户仍然登录,你可以这样做:
@Override
void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
SecurityContext context = (SecurityContext) session.getAttribute
(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
Authentication authentication = context.getAuthentication();
// drill down from here, but could be authentication.getName()
}
我正在使用 javax.servlet.http.HttpSessionListener
class 来监听我的 Spring 引导应用程序中的会话更改
public interface HttpSessionListener extends EventListener {
default void sessionCreated(HttpSessionEvent se) {
}
default void sessionDestroyed(HttpSessionEvent se) {
}
}
问题是,如何从 HttpSessionEvent
中检索用户信息?
我想在会话销毁后删除用户上传的所有文件,所以我至少需要他的ID
您可以通过 httpEvent 对象获取会话,并从会话中获取当前用户信息
se.getSession()
默认情况下,Spring 安全性将 SecurityContext
存储在由 HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY
定义的密钥下的会话中。所以,如果用户仍然登录,你可以这样做:
@Override
void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
SecurityContext context = (SecurityContext) session.getAttribute
(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
Authentication authentication = context.getAuthentication();
// drill down from here, but could be authentication.getName()
}