2

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

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

感谢您的任何帮助。

4

1 回答 1

2

此代码创建一个 Sessionlistener 来管理可以注入的列表中的打开会话。然后你可以通过注入会话列表@SessionList

会话监听器.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());
  } 

}

会话列表.java

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

会话生产者.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;
   }
}
于 2013-11-14T10:12:09.920 回答