java實現單一登入
阿新 • • 發佈:2019-01-24
1、建一個session監聽類
public class SessionListener implements HttpSessionListener{
public static HashMap sessionMap = new HashMap();
public void sessionCreated(HttpSessionEvent hse) {
HttpSession session = hse.getSession();
}
public void sessionDestroyed(HttpSessionEvent hse) {
HttpSession session = hse.getSession();
this .DelSession(session);
}
public static synchronized void DelSession(HttpSession session) {
if (session != null) {
// 刪除單一登入中記錄的變數
if(session.getAttribute("users")!=null){
TblUser tu =(TblUser)session.getAttribute("users" );
SessionListener.sessionMap.remove(tu.getUserID());
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
2、登入呼叫的方法
public ResultObject updateUserLoginAjax(HttpSession session ,String uname,String upwd )throws Exception{
//使用者名稱及密碼的判斷省略
// 1.實現單一登入 踢人效果
if ( null != SessionListener.sessionMap.get(tu.getUserID())) {
//第一次登入的使用者session銷燬
//將第一次登入使用者的資訊從map中移除
BaseAction.forceLogoutUser(tu.getUserID());
//本次登入使用者新增到map中
SessionListener.sessionMap.put(tu.getUserID(), session);
} else{
//以使用者id為key鍵存入map中,以判斷下一次登入的人
SessionListener.sessionMap.put(tu.getUserID(), session);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
3、2步驟中BaseAction中呼叫的forceLogoutUser()的方法
/**
*
* @author
* @params uid 要強行退出的使用者的ID
* @return
* @description 通過使用者ID來強行把已經線上的使用者的登入資訊
*/
@SuppressWarnings("unchecked")
public static void forceLogoutUser(Long uid) {
// 刪除單一登入中記錄的變數
if (SessionListener.sessionMap.get(uid) != null) {
HttpSession hs = (HttpSession) SessionListener.sessionMap.get(uid);
SessionListener.sessionMap.remove(uid);
Enumeration e = hs.getAttributeNames();
while (e.hasMoreElements()) {
String sessionName = (String) e.nextElement();
// 清空session
hs.removeAttribute(sessionName);
}
// hs.invalidate();
}
}