2010-08-22 73 views
19

为了记录目的,我想创建一个记录器,它自动将当前会话的ID添加到记录的行中。
对于登录的用户来说,这不是问题:使用Spring Security检索会话ID

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

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

谢谢!

+0

这个问题回答了我的问题。谢谢。提问的好方法。 – TRiNE 2016-09-05 17:05:51

回答

43

您可以使用

RequestContextHolder.currentRequestAttributes().getSessionId(); 

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

+0

工程就像一个魅力!谢谢! – abyx 2010-08-22 17:01:42

+0

@axtavt我有角度的应用程序运行在diffrnt端口和服务器代码运行在diffrnt端口。在我的服务器代码中实现了spring安全性,如果成功,它会重定向到另一个java控制器,因为我包装了所有用户角色和其他信息。但我得到一个唯一'anonymusUser'因为我的重定向url没有cookie。是克服你的解决方案.. – SakthiSureshAnand 2016-09-08 09:12:42