1. 程式人生 > >java實現單一登入

java實現單一登入

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();
                   }
         }