有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何让所有用户登录到我的web应用程序

我使用spring-mvc,每次登录我的web应用的用户我都会创建一个会话变量user,它是一个包含他的id、姓名和其他一些信息的对象

session.setAttribute("user", user);

我想要的是有一个登录我的程序的所有用户的列表

我想让这个列表检查同时登录,因为它必须只有一个帐户访问

ps:不要告诉我使用spring-security,因为我只想使用MVC InterceptorpreHandle()


共 (1) 个答案

  1. # 1 楼答案

    您可以使用HttpSessionListener和ServletContextListener的实现。 HttpSessionListener在创建或销毁会话时被调用,而as ServletContextListener在创建或销毁上下文时被调用

    编辑: HttpSessionBindingListener可用于实例可能存储在会话中的类,例如在您的用户案例中

    当HttpSession将此用户的实例设置为会话属性时。setAttribute(),则会调用valueBound()。当它被任一HttpSession删除时。removeAttribute(),或使会话失效,或被另一个HttpSession替换。setAttribute(),则会调用valueUnbound()

    例如:

    public class User implements HttpSessionBindingListener {
    
    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        addLoginUser(event);
    }
    
    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        removeLoginUser(event);
    }
    
    private void removeLoginUser(HttpSessionBindingEvent event){
    if (user != null) {
                ServletContext context = event.getSession().getServletContext();
                Set<User> logins = context.getAttribute("loginUsers");
                logins.remove(this);
        }
     }
       private void addLoginUser(HttpSessionBindingEvent event){
    
       if (user != null) {
          ServletContext context = event.getSession().getServletContext();
          Set<User> logins = context.getAttribute("loginUsers");
          logins.add(this);
       }
    }
    

    }

     //Use this listner for adding loginUsers when ServletContext is initialized.
     public class MyServletContextListener implements ServletContextListener{
       public void contextInitialized(ServletContextEvent event){
           Set<User> logins = new HashSet<User>();
    
           //add Initial login to ServletContext
           event.getServletContext().setAttribute("loginUsers", logins);
       }
    
     public void contextDestroyed(ServletContextEvent event){}
    
     }
    

    在您的网站中添加以下配置。xml文件

    <listener>
        <listener-class>
            package.name.MySessionAttributeListener
        </listener-class>
    </listener>
    
     <listener>
        <listener-class>
            package.name.MyServletContextListener
        </listener-class>
    </listener>
    

    希望这有帮助,谢谢