JSF在维护我的活动会话时注销其他用户。

JSF在维护我的活动会话时注销其他用户。,jsf,session,jsf-2,ejb,invalidation,Jsf,Session,Jsf 2,Ejb,Invalidation,在我维护会话时,我试图以管理员的身份注销jsf应用程序中的一个用户,但这并没有产生任何效果。 在我的应用程序中,用户可以轻松地使自己的会话无效,但我想要实现的是另一个用户说管理员可以注销其他用户 所以我的主要问题是如何访问其他用户的会话,以及是否可以将jsf会话存储在数据库中 谢谢你的帮助 这段代码创建了一个Sessionlistener,它在一个可以注入的列表中管理打开的会话。然后,您可以通过@SessionList SessionListener.java public class Sess

在我维护会话时,我试图以管理员的身份注销jsf应用程序中的一个用户,但这并没有产生任何效果。 在我的应用程序中,用户可以轻松地使自己的会话无效,但我想要实现的是另一个用户说管理员可以注销其他用户

所以我的主要问题是如何访问其他用户的会话,以及是否可以将jsf会话存储在数据库中


谢谢你的帮助

这段代码创建了一个Sessionlistener,它在一个可以注入的列表中管理打开的会话。然后,您可以通过
@SessionList

SessionListener.java

public class SessionListener implements HttpSessionListener {

  @Inject
  @SessionList
  private List<HttpSession> sessions;

  @Override
  public void sessionCreated(HttpSessionEvent event) {
    session.add(event.getSession());
  }

  @Override
  public void sessionDestroyed(HttpSessionEvent event) {
        session.remove(event.getSession());
  } 

}
SessionProducer.Java

@ApplicationScoped
public class SessionProducer {
   private List<HttpSession> session;

   @Produces
   @SessionList
   public void List<Session> getSessions() {
      if(sessions == null) sessions = new LinkedList<HttpSession>();
      return sessions;
   }
}
@ApplicationScoped
公共类会议制作人{
非公开名单会议;
@产生
@会期者
公共无效列表getSessions(){
如果(sessions==null)sessions=newlinkedlist();
返回会议;
}
}

我想到的一个简单解决方案的可能重复之处是有一个
@ApplicationScoped
托管bean,其中包含一个映射和所有当前登录的用户。仅使用管理员凭据才能访问它。如果要使会话无效,请在映射中将其标记为无效。您应该让所有用户请求检查每个请求中的映射,如果会话无效,则为当前用户执行无效过程。
@ApplicationScoped
public class SessionProducer {
   private List<HttpSession> session;

   @Produces
   @SessionList
   public void List<Session> getSessions() {
      if(sessions == null) sessions = new LinkedList<HttpSession>();
      return sessions;
   }
}