如何在 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()
}