第一步:自建一个继承自HttpSessionListener的 监听器
package com.zhph.util;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* session 监听事件
* @author HAXF010
*
*/
public class SessionHelper implements HttpSessionListener {
/* Session创建事件 */
public void sessionCreated(HttpSessionEvent event) {
}
/* Session失效事件 */
public void sessionDestroyed(HttpSessionEvent event) {
SessionLockHelper.moveSession(event.getSession());
}
}
第二步:在web.xml中配置第一步创建的监听类 ; SessionHelper 是自己的监听类
<listener>
<listener-class>com.zhph.util.SessionHelper</listener-class>
</listener>
第三步:创建工具类 SessionLockHelper.java
package com.zhph.util;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import com.zhph.vo.LoginUser;
public class SessionLockHelper {
public static Map<String, HttpSession> map = new HashMap<String, HttpSession>();
//添加session到集合;用户的id 作为 session 的 key
public static void putSession(HttpSession session) {
LoginUser user = (LoginUser) session.getAttribute("user");
map.put(user.getId(), session);
}
public static void moveSession(HttpSession session) {
LoginUser user = (LoginUser) session.getAttribute("user");
map.remove(user.getId());
}
//让对应用户的会话失效
public static void destroyedSession(LoginUser user) {
System.out.println("会话失效了。");
HttpSession session = map.get(user.getId());
session.invalidate();
}
}
第四步:当用户登录成功时调用 SessionLockHelper.putSession(HttpSession session)方法
第五步:对于要强制注销的用户调用SessionLockHelper.destroyedSession(LoginUser user)方法。
第六步:用户所有的请求的拦截器判断获取到当前用户的Session 都获取不到了,然后代码跳转到登录页面;