在Spring Boot应用程序中,将用户名添加为自定义会话属性。我这样做是为了在Tomcat管理器中,我可以看到谁当前正在使用该应用程序:
我实现了javax.servlet.Filter来添加用户名。但这是推荐的方法吗?毕竟,属性是在每个单个请求上添加的。 Spring是否提供每个会话仅执行一次的回调?
答案 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以便在每个新会话中调用它。