Spring-如何每个会话仅添加一次会话属性

时间:2019-05-28 15:43:39

标签: spring spring-boot spring-mvc spring-security

在Spring Boot应用程序中,将用户名添加为自定义会话属性。我这样做是为了在Tomcat管理器中,我可以看到谁当前正在使用该应用程序:

enter image description here

我实现了javax.servlet.Filter来添加用户名。但这是推荐的方法吗?毕竟,属性是在每个单个请求上添加的。 Spring是否提供每个会话仅执行一次的回调?

2 个答案:

答案 0 :(得分:1)

将属性添加到HttpSession后,该属性将在会话中保持存在,前提是会话未到期或未将其从会话中删除。因此,我看不到实现Filter为每个请求向HttpSession添加属性的意义,因为自添加属性以来,该属性已在会话中存在。

此外,Spring Security已经完成了您正在做的事情(SecurityContextPersistenceFilter中的ps),我自己不会再做一次。实际上,会话属性SPRING_SECURITY_CONTEXT与我们使用SecurityContextHolder.getContext()访问当前登录用户信息的对象相同。

这意味着,如果Authentication中设置的SecurityContextHolder对象已实现其toString()以打印用户名(例如this),则您还会看到Tomcat Manager中SPRING_SECURITY_CONTEXT会话属性中的用户名。

答案 1 :(得分:0)

Spring MVC具有用于处理会话的工具,本教程的@SessionAttributes部分实际上讨论了在Session范围内注册bean以便在每个新会话中调用它。

more info here