1. 程式人生 > >struts2+spring防止使用者重複登入(單點登入)

struts2+spring防止使用者重複登入(單點登入)

所有人都知道使用者登入session是一個很好的選擇,而且幾乎都是用的session,但是session是不能跨視窗使用的,每開啟一個瀏覽器,系統會賦予一個新的sessionID,而每個sessionID是不同的,也就是說你每次登入用的都是不同的session,而不是你之前登入使用的那個。那麼如果你要在全域只能使用一個使用者ID,那怎麼辦呢?

我們可以通過自定義一個sessionListener,用這個sessionListener實現HttpSessionAttributeListener,實現該介面需要實現三個方法,attributeAdded、attributeRemoved、attributeReplaced。在這裡我們只需實現前兩個方法。首先我們用一個list容器裝當前已經登入的使用者,接著在其他使用者登入的時候判斷是否為之前已經登入的使用者,如果該使用者已經登入,你可以選擇友情提示該使用者已經登入,你也可以直接將前面已經登入的使用者擠出去,用當前登入使用者。

具體程式碼如下:

public class sessionListener implements HttpSessionAttributeListener{
	public static List list = new ArrayList();  
	
	public void attributeAdded(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub
		if(arg0.getName().equals("user")||arg0.getName().equals("backUser")){
			User user=(User)arg0.getValue();
			list.add(user);
		}
		
	}

	public void attributeRemoved(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub
		 try {  
	            int n = 0;  
	            User u = (User) arg0.getValue();  
	            for (int i = 0; i < list.size(); i++) {  
	                User user = (User) list.get(i);  
	                if (u.getId().equals(user.getId())) {  
	                    n = i;  
	                    break;  
	                }  
	            }  
	            list.remove(n);  
	        } catch (Exception e) {  
	        }  
	}

	public void attributeReplaced(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	}

判斷使用者是否重複登入方法:
 //是否重複登入的封閉方法  
    public static boolean getRepeat(Long userId) {  
        boolean flag = false;  
        List list = sessionListener.list;  
        for (int i = 0; i < list.size(); i++) {  
            User user = (User) (list.get(i));           
            if (userId.equals(user.getId())) {  
                flag = true;  
            }  
        }  
        return flag;  
    }