春季安全:
我想用所谓的牵引方式注销:发生了会话超时或注销自身用户...
反正在这些方面,在HttpSessionEventPublisher
和SessionRegistry
称为destroyedSession时从sessionIds列表中删除SessionInformation
...
当我使用下面的方法强制注销特定用户时,此方法仅在“过期”SessionInformation
在SessionRegistry
。现在,当我从SessionRegistry
获得所有在线用户“getAllPrincipals()”时,会话过期的用户就在列表中!注销特定会话ID
@Override
public boolean forceLogOut(int userId){
for (Object username: sessionRegistry.getAllPrincipals()) {
User temp = (User) username;
if(temp.getId().equals(userId)){
for (SessionInformation session : sessionRegistry.getAllSessions(username, false)) {
session.expireNow();
}
}
}
return true;
}
我怎么能注销“特定用户”或“的sessionId”该会话对象从“Web服务器”和“会议注册表”中删除?
我在网上搜索,发现HttpSessionContext
在Servlet API中可以从特定sessionId获取HttpSession。然后使会话无效。但我认为这种方法并不完全有用!
(注意,这个类已弃用!)
什么是最好的方法?我是否错了?
sessionRegistry.getSessionInformation(的sessionId).expireNow(); Spring将标记此会话过期。来自此会话的任何进一步请求都会调用注销。 –
这是真的,但是如果用户不发送任何请求,并且会话超时最大不超过1小时(超时不是超时),那么当使用'getAllPrincipals()'时,此方法返回所有原则,包括在线会话和到期会话...这是我的问题...! –