var*_*run 11 spring spring-mvc spring-security
在我的Spring MVC应用程序中,我想访问Principal
我的服务层中由spring security创建的对象.我想在我的服务类中注入它,但我相信它不会是线程安全的.我想的其他选择是将它作为参数传递给所有服务方法,但这对我来说看起来不太干净.有什么更好的方法呢?
Lau*_*ntG 17
我认为最好的方法是使用SecurityContextHolder
.
Principal principal = SecurityContextHolder.getContext().getAuthentication();
Run Code Online (Sandbox Code Playgroud)
Spring解释了它在文档中的工作原理:
最基本的对象是SecurityContextHolder.这是我们存储应用程序当前安全上下文的详细信息的地方,其中包括当前使用该应用程序的主体的详细信息.默认情况下,SecurityContextHolder使用ThreadLocal来存储这些详细信息,这意味着安全上下文始终可用于同一执行线程中的方法,即使安全上下文未作为这些方法的参数显式传递.如果在处理当前主体的请求之后注意清除线程,以这种方式使用ThreadLocal是非常安全的.当然,Spring Security会自动为您解决这个问题,因此无需担心.
由于它使用a ThreadLocal
来存储当前的身份验证,因此您不会遇到任何线程安全问题.
归档时间: |
|
查看次数: |
7795 次 |
最近记录: |