springmvc單點登陸

原理:java

  • 用戶A使用帳號a在瀏覽器當中登陸,而後用戶B在另一臺電腦上的瀏覽器登陸帳號a,當用戶B登陸驗證成功時,將會觸

發登陸監聽類,在監聽類當中判斷出帳號a已經被用戶A登陸,就把用戶A的帳號a 踢出去,此時當用戶A操做頁面,頁面就會跳轉到web

登陸頁面。spring

代碼實現:瀏覽器

  • 在實現過程當中,用到LoginListenner監聽類、login登陸方法以及在web.xml中配置監聽類
  • 當登陸成功後,向session中放入登陸成功的帳號對象loginuser,觸發LoginListenner中的attributeAdded事件,在這個事件中,

咱們判斷存放帳號和session對應關係的map中是否有當前登陸的帳號的session,若是有咱們就把該session從map中移除,同時注session

銷該session,而後把剛登陸的帳號和session放入map。mybatis

代碼:package com.jk.util;this

 

import java.util.HashMap;spa

import java.util.Map;.net

 

import javax.servlet.http.HttpServletRequest;code

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionAttributeListener;

import javax.servlet.http.HttpSessionBindingEvent;

 

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

 

import com.jk.entity.CodePw;

import com.sun.xml.bind.v2.runtime.Location;

/**

*

* <pre>項目名稱:spring-mybatis

* 類名稱:LoginListenner

* 類描述: 登陸監聽類-處理同一時間只容許帳號,單地點登陸

* 建立人:

* 建立時間:2016年10月29日 上午10:44:50

* 修改人:

* 修改時間:2016年10月29日 上午10:44:50

* 修改備註:

* @version </pre>

*/

public class LoginListenner implements HttpSessionAttributeListener {

/**

* 用於存放帳號和session對應關係的map

*/

private Map<String, HttpSession> map = new HashMap<String, HttpSession>();

/**

* 當向session中放入數據觸發

*/

public void attributeAdded(HttpSessionBindingEvent event) {

String name = event.getName();

System.err.println(name);

if (name.equals("adminUser")) {

CodePw user = (CodePw) event.getValue();

if (map.get(user.getUsercode()) != null) {

HttpSession session = map.get(user.getUsercode());

session.removeAttribute(user.getUsercode());

session.invalidate(); // 使得 session 失效

}

map.put(user.getUsercode(), event.getSession());

}

}

/**

* 當向session中移除數據觸發

*/

public void attributeRemoved(HttpSessionBindingEvent event) {

String name = event.getName();

if (name.equals("adminUser")) {

CodePw user = (CodePw) event.getValue();

map.remove(user.getUsercode());

}

}

public void attributeReplaced(HttpSessionBindingEvent event) {

}

public Map<String, HttpSession> getMap() {

return map;

}

public void setMap(Map<String, HttpSession> map) {

this.map = map;

}

}

登陸方法

web.xml

<!--一個用戶只能在一個主機登陸 -->

<listener>

<listener-class>com.test.util.LoginListenner</listener-class>

</listener>

<!-- 一個用戶只能在一個主機登陸 end-->

相關文章
相關標籤/搜索