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