如何从Web管理面板中杀死用户sessionId?我的意思是,我有多个用户使用jboss 4.2和struts 1.3进入网站,我想从同一个网站远程关闭其中一些用户的会话。什么是最好的策略?
一种可能的解决方案是将JSESSIONID与数据库中的用户相关联并设置JSESSIONID。然后为每个事务询问我是否删除了用户会话。
我尝试使用带有FileStore会话的jboss端的context.xml来处理它,但是如果我删除了会话文件(例如2B6609A6CA38E35EEDF21BF3F3253BC8.session),则会话仍处于活动状态。
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false">
<Store className="org.apache.catalina.session.FileStore" directory="\tmp\">
</Store>
</Manager>
有什么建议吗?感谢
答案 0 :(得分:2)
其中一种方法是在HttpSessionListener
:
public class SessionManager implements HttpSessionListener {
private static Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();
@Override
public void sessionCreated(HttpSessionEvent event) {
sessions.put(event.getSession().getId(), event.getSession());
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
sessions.remove(event.getSession().getId());
}
public static boolean invalidate(String sessionId) {
HttpSession session = sessions.get(sessionId);
if (session != null) {
session.invalidate();
return true;
} else {
return false;
}
}
}
它允许您在webadmin面板的代码中执行类似的操作:
SessionManager.invalidate(someSessionId);
也许您已经使用HttpSessionListener
将会话与数据库同步。那将是完全多余的。
答案 1 :(得分:0)
应该有一个JMX接口。