1、创建一个实现HttpSessionListener的监听器
public class SessionHelper implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
SessionLockHelper.moveSession(httpSessionEvent.getSession());
}
}
2、在web.xml中配置监听
<listener>
<listener-class>com.zgh.util.SessionHelper</listener-class>
</listener>
3、创建工具类 SessionLockHelper.java
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(String userId) {
HttpSession session = map.get(userId);
session.invalidate();
}
}
4、当用户登录成功时调用 SessionLockHelper.putSession(HttpSession session)方法
5、对于要强制注销的用户调用SessionLockHelper.destroyedSession(String userId)方法
6、请求拦截器判断是否能获取到当前用户的Session,如果获取不到,跳转到登录页面