使用 Spring 安全性检索会话 ID

2022-09-01 13:51:24

出于日志记录目的,我想创建一个记录器,该记录器会自动将当前会话的 ID 添加到记录的行中。
对于登录用户来说,这不是问题:

((WebAuthenticationDetails) SecurityContextHolder.getContext().getAuthentication().getDetails())
    .getSessionId()

问题是,在用户登录之前返回。有没有另一种方法可以在没有引用当前响应或类似内容的情况下获取会话ID?getAuthentication()null


答案 1

您可以使用

RequestContextHolder.currentRequestAttributes().getSessionId();

这依赖于Spring的,所以它应该与Spring MVC一起使用,或者你应该有一个声明。如果不存在,还将创建会话。RequestContextHolderDispatcherServletRequestContextListener


答案 2

更简单的方法是:

@GetMapping(path = "/foo")  
public void foo(HttpSession session) {  
    String sessionId = session.getId();  
}

推荐