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 次 |
| 最近记录: |