在项目中会出现用户不点击登出时间触发session.invalidate()方法,此时我们就无法确定用户的实际登录状态,再次我们使用HttpSessionListener监听器来管理用户session失效,进而解决了在线用户的统计或者全局参数的控制
值得注意的是:
- @ServletComponentScan注解需要添加到springboot启动类中,否则监听器无法被扫描到而不能执行
- @WebListenter注解,添加到实现类上,如果没有添加那么将不能使用
/**
* 使用说明 需要在启动类上添加@ServletComponentScan注解,以扫描到该监听器
* 用户监听器实现用于移除在线登录用户信息
* @author kexin 2018/11/19
*
*/
@WebListener//监听器注解
public class OpOnlineUserSessionListener implements HttpSessionListener {
/**
* session被销毁时触发,如下情况
* 1.主动调用session.invalidate()
* 2.session超时
*/
@Override
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
//获取当前用户信息
User loginUser = (User)session.getAttribute(Constant.LOGIN_USER);
//移除在线用户
GlobalVariable.loginMap.remove(loginUser.getUserId());
}
//session被创建时触发
@Override
public void sessionCreated(HttpSessionEvent event) {}
}