使用 Spring Security 检索会话 ID

新手上路,请多包涵

出于记录目的,我想创建一个记录器,自动将当前会话的 ID 添加到记录的行中。

对于登录用户,这不是问题:

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

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

原文由 abyx 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 492
2 个回答

你可以使用

RequestContextHolder.currentRequestAttributes().getSessionId();

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

原文由 axtavt 发布,翻译遵循 CC BY-SA 2.5 许可协议

更简单的方法是:

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

原文由 Sandeep Sharda 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题