1. 程式人生 > >Spring boot 專案HttpSessionListener用於監聽session失效時移除線上使用者的全域性引數

Spring boot 專案HttpSessionListener用於監聽session失效時移除線上使用者的全域性引數

在專案中會出現使用者不點選登出時間觸發session.invalidate()方法,此時我們就無法確定使用者的實際登入狀態,再次我們使用HttpSessionListener監聽器來管理使用者session失效,進而解決了線上使用者的統計或者全域性引數的控制


值得注意的是:

  1. @ServletComponentScan註解需要新增到springboot啟動類中,否則監聽器無法被掃描到而不能執行
  2. @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) {}

}