4

我的应用程序中有一个登录功能,我可以将用户存储在会话中,如果他已经在同一个浏览器上登录,我还可以阻止用户登录。但是如果登录用户尝试登录从不同的浏览器再次登录我无法阻止他。

这是代码..

我正在使用这个

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

现在,如果 loggedInUser 尝试从另一个选项卡中的相同浏览器进入应用程序,则此 loggedInUser 具有用户对象(所以它适用于我)

但是,如果 loggedInUser 尝试从不同的浏览器进入应用程序,则此 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

4

1 回答 1

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 技巧Java2s 链接

于 2013-08-31T13:32:38.440 回答