我是Spring Security的新手,我遇到了过期用户会话的问题。
在我的应用程序中,有ROLE_ADMIN
的管理员,他们可以更改其他用户的角色。
我想使权限被管理员更改的用户的会话过期。
我发现我可以通过使用SessionRegistry获得所有登录用户的会话。
我检查了可以使用sessionRegistry.getAllSessions()
获取所有会话信息,并尝试使用以下代码使会话信息过期。
List<SessionInformation> sessionInformations = sessionRegistry.getAllSessions(allPrincipals.get(i), false);
for (SessionInformation information : sessionInformations) {
information.expireNow();
sessionRegistry.removeSessionInformation(information.getSessionId());
}
allPrincipals.set(i, new AccountUserAdaptor(requestedAccount));
我认为以上代码足以使特定其他用户的会话过期。
但是在SecurityContextPersistenceFilter
中,身份验证是从我认为已经过期的会话中恢复的。
我检查了request.getSession()
,我可以得到有效的会话,我认为已经过期。甚至在information.getSessionId()
和request.getSession()
的SessionID是相同的。
我想知道为什么会话未过期。
我使用的是Spring(不是Spring-Boot)
1条答案
按热度按时间0s7z1bwu1#
如果您正在使用spring-session和jdbc或redis,您可以使用此代码清除任何用户的会话。
传递要清除会话的用户的电子邮件/用户名。