chz*_*gla 60 java spring spring-security java-ee
Userprincipal是否从SecurityContextHolder
绑定到请求或会话中检索?
UserPrincipal principal = (UserPrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
这是我访问当前登录用户的方式.如果当前会话被销毁,这会失效吗?
Ral*_*lph 110
这取决于您如何配置它(或者说,您可以配置不同的行为).
在Web应用程序中,您将使用ThreadLocalSecurityContextHolderStrategy
与之交互的内容SecurityContextPersistenceFilter
.
Java Doc的SecurityContextPersistenceFilter
开头是:
使用在请求之前从配置的{@link SecurityContextRepository}获取的信息填充{@link SecurityContextHolder},并在请求完成并清除上下文持有者后将其存储回存储库.默认情况下,它使用{@link HttpSessionSecurityContextRepository}.有关HttpSession相关配置选项的信息,请参阅此类.
顺便说一句:HttpSessionSecurityContextRepository是SecurityContextRepository的唯一实现(我在默认的libs中找到)
它的工作原理如下:
HttpSessionSecurityContextRepository
使用在HttpSession(密钥="SPRING_SECURITY_CONTEXT")来存储一个SecurityContext
对象.SecurityContextPersistenceFilter
是一个过滤器,使用SecurityContextRepository
例如 HttpSessionSecurityContextRepository
加载和存储SecurityContext
对象.如果HttpRequest通过过滤器,则过滤器SecurityContext
从存储库获取并将其放入SecurityContextHolder(SecurityContextHolder#setContext
)SecurityContextHolder
有两个方法setContext
和getContext
.两者都使用a SecurityContextHolderStrategy
来指定set-和get-Context方法中的确切操作.- 例如,ThreadLocalSecurityContextHolderStrategy
使用本地线程来存储上下文.总而言之:用户主体(SecurityContext的元素)存储在HTTP会话中.对于每个请求,它都放在您访问它的本地线程中.
归档时间: |
|
查看次数: |
35629 次 |
最近记录: |