spring-security 使用Spring Security检索会话ID

b09cbbtk  于 2022-11-11  发布在  Spring
关注(0)|答案(3)|浏览(238)

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

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

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

hjqgdpho

hjqgdpho1#

您可以使用

RequestContextHolder.currentRequestAttributes().getSessionId();

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

brtdzjyr

brtdzjyr2#

更简便的办法是:

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

x7yiwoj43#

如果您访问本主题是为了在WebSockets中找到解决方案,以下内容可能对您有用;

@MessageMapping("/message")
public void message(@Header("simpSessionId") String sessionId) {
    // ...
}

相关问题