使用Spring Security检索会话ID

时间:2010-08-22 15:30:48

标签: java spring spring-security

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

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

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

2 个答案:

答案 0 :(得分:49)

您可以使用

RequestContextHolder.currentRequestAttributes().getSessionId();

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

答案 1 :(得分:3)

最简单的方法是:

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