2013-08-31 77 views
4

我在我的應用程序中有一個登錄功能, 我可以將用戶存儲在會話 中,並且我也能夠阻止用戶登錄,如果他已在同一瀏覽器中登錄.. 但是,如果signedIn用戶嘗試再次從不同的瀏覽器登錄,我無法阻止他。如何停止已登錄用戶從其他瀏覽器登錄

這裏是代碼..

我用這

   session=getThreadLocalRequest().getSession(true); 
      User loggedInUser = (User) session.getAttribute("user"); 

現在這與loggedInUser有用戶對象如果與loggedInUser試圖從同一個瀏覽器應用程序獲取在另一個選項卡(SO它爲我的作品)

但這與loggedInUser爲null如果與loggedInUser試圖從不同的瀏覽器(所以它不是爲我工作)

在應用程序中獲得

這裏是代碼..

  public User signIn(String userid, String password) { 
    String result = ""; 
    ApplicationContext ctx = new ClassPathXmlApplicationContext(
    "applicationContext.xml"); 
    MySQLRdbHelper rdbHelper = (MySQLRdbHelper) ctx.getBean("ManagerTie"); 
    User user = (User) rdbHelper.getAuthentication(userid, password); 
    if(user!=null) 
    { 
     session=getThreadLocalRequest().getSession(true); 
     User loggedInUser = (User) session.getAttribute("user"); 

     if(loggedInUser != null && user.getId() == loggedInUser.getId()){ 
      user.setId(0); 
     }else{ 
     session=getThreadLocalRequest().getSession(true); 
     session.setAttribute("user", user); 
     } 


    } 
    return user; 

我使用JAVA,GWT

回答

2

是通過存儲static地圖在服務器端,存儲User Id作爲重點,並作爲Sessionvalue

這裏是我的包直接運行代碼。

class SessionObject implements HttpSessionBindingListener { 
     User loggedInUser; 
     Logger log = Logger.getLogger(SessionObject.class); 
     public SessionObject(User loggedInUser) { 
      this.loggedInUser=loggedInUser; 
     } 
     public void valueBound(HttpSessionBindingEvent event) { 
      LoggedInUserSessionUtil.getLogggedUserMap() 
             .put(loggedInUser, event.getSession()); 
      return; 
     } 

     public void valueUnbound(HttpSessionBindingEvent event) { 
      try { 
       LoggedInUserSessionUtil.removeLoggedUser(loggedInUser); 
       return; 
      } catch (IllegalStateException e) { 
       e.printStackTrace(); 
      } 
      } 

    } 

Java tip I followedJava2s link而我開發。

+0

謝謝,但LoggedInUserSessionUtil未解決,任何想法.. – junaidp

+0

這是一個包含地圖及其getter和setter類。 –

相關問題