Java 如何让所有登录到web应用程序的用户列表

Java 如何让所有登录到web应用程序的用户列表,java,spring,spring-mvc,Java,Spring,Spring Mvc,我使用springmvc,每次登录我的web应用程序的用户我都会创建一个会话变量user,它是一个包含他的id、姓名和其他一些信息的对象 session.setAttribute("user", user); 我想要的是有一个登录到我的程序中的所有用户的列表 我想让这个列表检查同时登录,因为它只能是一个帐户访问 ps:不要告诉我使用spring security,因为我只想使用MVC拦截器和preHandle() @Autowired ServletContext context; 2)

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

session.setAttribute("user", user);
我想要的是有一个登录到我的程序中的所有用户的列表

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

ps:不要告诉我使用
spring security
,因为我只想使用
MVC拦截器
preHandle()

@Autowired
ServletContext context; 
2) 您需要收集上下文中设置的所有登录用户

...
    public void login(User user) {
        logins.add(user);
    }
...    
    public void logout(User user) {
        logins.remove(user);
    }
如果您已经在会话中存储登录的用户

public void sessionDestroyed(HttpSessionEvent event) {
    User user = (User) event.getSession().getAttribute("user");
    if (user != null) {
        Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
        logins.remove(user);
    }
}
public void sessionDestroyed(HttpSessionEvent事件){
User User=(User)event.getSession().getAttribute(“用户”);
如果(用户!=null){
Set logins=(Set)event.getSession().getServletContext().getAttribute(“登录”);
删除(用户);
}
}
1)使用以下代码在SpringMVC中自动连接ServletContext对象

@Autowired
ServletContext context; 
2) 您需要收集上下文中设置的所有登录用户

...
    public void login(User user) {
        logins.add(user);
    }
...    
    public void logout(User user) {
        logins.remove(user);
    }
如果您已经在会话中存储登录的用户

public void sessionDestroyed(HttpSessionEvent event) {
    User user = (User) event.getSession().getAttribute("user");
    if (user != null) {
        Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
        logins.remove(user);
    }
}
public void sessionDestroyed(HttpSessionEvent事件){
User User=(User)event.getSession().getAttribute(“用户”);
如果(用户!=null){
Set logins=(Set)event.getSession().getServletContext().getAttribute(“登录”);
删除(用户);
}
}

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

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

当HttpSession.setAttribute()将此用户的实例设置为会话属性时,将调用valueBound()。当它被HttpSession.removeAttribute()或会话的invalidate删除,或被另一个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);
   }
}
公共类用户实现HttpSessionBindingListener{
@凌驾
public void valueBound(HttpSessionBindingEvent事件){
addLoginUser(事件);
}
@凌驾
public void valueUnbound(HttpSessionBindingEvent事件){
移除用户(事件);
}
私有void removeLoginUser(HttpSessionBindingEvent事件){
如果(用户!=null){
ServletContext=event.getSession().getServletContext();
设置logins=context.getAttribute(“loginUsers”);
删除(这个);
}
}
私有void addLoginUser(HttpSessionBindingEvent事件){
如果(用户!=null){
ServletContext=event.getSession().getServletContext();
设置logins=context.getAttribute(“loginUsers”);
添加(这个);
}
}
}

//初始化ServletContext时,使用此listner添加登录器。
公共类MyServletContextListener实现ServletContextListener{
公共void contextInitialized(ServletContextEvent事件){
Set logins=new HashSet();
//将初始登录添加到ServletContext
event.getServletContext().setAttribute(“loginUsers”,logins);
}
public void contextdestromed(ServletContextEvent事件){}
}
在web.xml文件中添加以下配置

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

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

package.name.MySessionAttributeListener
package.name.MyServletContextListener

希望这有帮助,谢谢。

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

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

当HttpSession.setAttribute()将此用户的实例设置为会话属性时,将调用valueBound()。当它被HttpSession.removeAttribute()或会话的invalidate删除,或被另一个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);
   }
}
公共类用户实现HttpSessionBindingListener{
@凌驾
public void valueBound(HttpSessionBindingEvent事件){
addLoginUser(事件);
}
@凌驾
public void valueUnbound(HttpSessionBindingEvent事件){
移除用户(事件);
}
私有void removeLoginUser(HttpSessionBindingEvent事件){
如果(用户!=null){
ServletContext=event.getSession().getServletContext();
设置logins=context.getAttribute(“loginUsers”);
删除(这个);
}
}
私有void addLoginUser(HttpSessionBindingEvent事件){
如果(用户!=null){
ServletContext=event.getSession().getServletContext();
设置logins=context.getAttribute(“loginUsers”);
添加(这个);
}
}
}

//初始化ServletContext时,使用此listner添加登录器。
公共类MyServletContextListener实现ServletContextListener{
公共void contextInitialized(ServletContextEvent事件){
Set logins=new HashSet();
//将初始登录添加到ServletContext
event.getServletContext().setAttribute(“loginUsers”,logins);
}
public void contextdestromed(ServletContextEvent事件){}
}
在web.xml文件中添加以下配置

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

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

package.name.MySessionAttributeListener
package.name.MyServletContextListener
希望这有帮助,谢谢。

忘记了l的创建