A面临下一个问题:我需要从子线程中获取当前登录的用户名,为此我使用MODE_INHERITABLETHREADLOCAL
SecurityContextHolder的策略。一切正常,直到用户注销并再次登录。之后MODE_INHERITABLETHREADLOCAL
不工作。我不知道为什么并尝试找到解决方案。问题是重新登录后SecurityContextHolder.getContext().getAuthentication()
,从子线程调用,返回null
(SecurityContextHolder.getContextHolderStrategy()
返回MODE_INHERITABLETHREADLOCAL
)。我在我的 security-config.xml 中设置了上下文持有者策略
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="org.springframework.security.core.context.SecurityContextHolder"/>
<property name="targetMethod" value="setStrategyName"/>
<property name="arguments"><list><value>MODE_INHERITABLETHREADLOCAL</value></list></property>
</bean>
如果有人可以帮助我,我将不胜感激。先感谢您!