struts2+spring防止使用者重複登入(單點登入)
阿新 • • 發佈:2019-02-13
所有人都知道使用者登入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; }