我获取当前登录的用户
服务器端SecurityContextHolder.getContext().getAuthentication()
并对用户进行一些登录。
以下是问题:
假设我有三个用户登录。
服务器端如何只是简单地调用SecurityContextHolder.getContext().getAuthentication();
来识别用户?
感谢您的回复。
答案 0 :(得分:8)
默认情况下,这里有三件重要的事情:
SecurityContextHolder
(并在请求完成后将认证对象存储回来)ThreadLocal
- 在请求处理期间存储身份验证对象认证后,对应的SecurityContext
对象存储在HTTP会话中。
在每个请求处理之前,特殊SecurityContextPersistenceFilter
被触发。它负责从HTTP会话(通过SecurityContext
实例)加载SecurityContextRepository
对象,并将SecurityContext
对象注入SecurityContextHolder
。有关更多详细信息,请查看SecurityContextPersistenceFilter
类的源代码。另一个重要的部分是默认情况下SecurityContextHolder
使用SecurityContext
变量存储ThreadLocal
对象(因此每个线程将有一个不同的身份验证对象)。
编辑。其他问题:
SecurityContextHolder
不是一个实例,它是一个带静态方法的辅助类。SecurityContext
存储在ThreadLocal
变量中。 SecurityContextHolder
是一个帮助程序类,可用于通过SecurityContext
变量获取/设置ThreadLocal
实例。SecurityContextHolder
相同的静态方法来获取/设置对应的 SecurityContext
。< / LI>
ThreadLocal
变量对不同的线程有不同的值。答案 1 :(得分:0)
对于每个logged-in
用户,都会有不同的会话。每个session
都有自己的配置。因此,在服务器端,SecurityContext
加载特定于session
的数据。您可以将SecurityContext
中的数据可视化为map
(键值)对。