Java Remote终止用户会话

时间:2011-08-17 21:38:36

标签: java servlets jboss struts sessionid

如何从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>

有什么建议吗?感谢

2 个答案:

答案 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接口。