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

时间:2013-11-14 07:44:18

标签: jsf session jsf-2 ejb invalidation

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

此代码创建一个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());
  } 

}

SessionList.java

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier
public @interface SessionList {
}

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;
   }
}