Dau*_*aud 11 java session spring spring-security httpsession
我指的是这个帖子,在Rob Winch(Spring Security Lead)的第二篇文章中,他提到我们可以访问sessionRegisty:
<session-management>
<concurrency-control session-registry-alias="sessionRegistry"/>
</session-management>
Run Code Online (Sandbox Code Playgroud)
因此,我注册HttpSessionEventPublisher过滤器web.xml并在我的<http>部分中指定上述设置.我不添加这个:
<beans:bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl" />
Run Code Online (Sandbox Code Playgroud)
在我的课堂上,我注入了一个sessionRegistry实例,如下所示:
@Autowired
private SessionRegistry sessionRegistry
Run Code Online (Sandbox Code Playgroud)
这就是我试图找出用户的会话的方法:
List<SessionInformation> userSessions = sessionRegistry.getAllSessions(username,false);
for (SessionInformation userSession : userSessions){
userSession.expireNow();
}
Run Code Online (Sandbox Code Playgroud)
主体是用户的用户名.调试时,sessionRegistry变量principals和sessionids变量为空.我在这里做错了什么,或者是krams博客提到的步骤,这是唯一的方法吗?
太长了,没法评论,所以我来回答一下。
打开 Spring Security 调试(添加到log4j.properties行log4j.logger.org.springframework.security=DEBUG)。这应该是此类问题的标准过程,因为调试会打印许多方便的信息,可以显示问题所在。
如果日志记录后调用public void registerNewSession(String sessionId, Object principal)里面的方法,您可以调试吗?SessionRegistryImpl如果不是,则表示HttpSessionEventPublisher设置不正确。
@Autowired private SessionRegistry sessionRegistry;你在课堂上使用,不是吗?
编辑:您可以检查注册表中是否有任何主体吗?
List<Object> userSessions = sessionRegistry.getAllPrincipals();
Run Code Online (Sandbox Code Playgroud)
其中Objects 是您使用的主体实例。
| 归档时间: |
|
| 查看次数: |
18690 次 |
| 最近记录: |