本文章摘编、转载需要注明来源 http://write.blog.csdn.net/postedit/8572467
对于spring security我个人是比较喜欢的一个安全框架,我们的系统中一般需要提供强制将用户踢出的功能,这个功能security也有提供,
首先我们要操作需要获取sessionRegistry中认证用户的所有SessionInformation,然后逐个调用SessionInformation里的expireNow()方法,然后ConcurrentSessionFilter
就会执行用户登录注销的功能;对于这个sessionRegistry.removeSessionInformation(sessionInformation
.getSessionId());我不知道是不是我的用法不对,调用了也不会强制注销用户的session,因为官方源代码中说调用removeSessionInformation的时候会让session的监听器响应到,但是我是没成功(望使用这个方式成功的朋友留言告诉下我);下面我们就看为什么调用SessionInformation里的expireNow()方法就能注销用户
/**
* 把当前用户踢出系统
*/
public void shotOff() {
List<SessionInformation> sessionInformations = sessionRegistry
.getAllSessions(SpringSecurityManager.getAuthentication()
.getPrincipal(), false);
for (SessionInformation sessionInformation : sessionInformations) {
sessionInformation.expireNow();
// sessionRegistry.removeSessionInformation(sessionInformation
.getSessionId());
}
}
我们来看下SessionInformation的源码
private Date lastRequest;
private final Object principal;
private final String sessionId;
private boolean expired = false;
//~ Constructors ===================================================================================&