使用Spring Security检索会话ID

aby*_*byx 23 java spring spring-security

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

((WebAuthenticationDetails) SecurityContextHolder.getContext().getAuthentication().getDetails())
    .getSessionId()
Run Code Online (Sandbox Code Playgroud)

问题是,在用户登录之前getAuthentication()返回null.有没有另一种方法来获取会话ID而不引用当前响应或任何类型的东西?

谢谢!

axt*_*avt 52

你可以用

RequestContextHolder.currentRequestAttributes().getSessionId();
Run Code Online (Sandbox Code Playgroud)

这依赖于Spring RequestContextHolder,所以它应该与Spring MVC一起使用,DispatcherServlet或者你应该RequestContextListener声明.如果不存在,也将创建会话.


小智 9

更简单的方法是:

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