使用Spring Security检索会话ID

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

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

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

谢谢!

你可以用

 RequestContextHolder.currentRequestAttributes().getSessionId(); 

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