出于记录目的,我想创建一个记录器,自动将当前会话的ID添加到记录的行中。
对于登录用户,这不是问题:
((WebAuthenticationDetails) SecurityContextHolder.getContext().getAuthentication().getDetails())
.getSessionId()
问题是,在用户登录getAuthentication()
之前返回null
。是否有另一种获取会话ID的方法,而没有引用当前响应或任何类型的内容?
答案 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();
}