Java Remote 终止用户 session

标签 java servlets jboss struts sessionid

如何从 Web 管理面板中删除用户 sessionId?我的意思是,我有多个用户使用 jboss 4.2 和 struts 1.3 进入一个网站,我想从同一个网站远程关闭其中一些用户的 session 。最佳策略是什么?

一种可能的解决方案是将 JSESSIONID 关联到数据库中的用户并设置 JSESSIONID。然后对于每个事务询问我是否删除用户 session 。

我尝试通过在 jboss 端使用 context.xml 和 FileStore session 来处理它,但是如果我删除 session 文件(例如 2B6609A6CA38E35EEDF21BF3F3253BC8.session), session 仍然处于 Activity 状态。

<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false">
    <Store  className="org.apache.catalina.session.FileStore" directory="\tmp\">  
    </Store>
 </Manager>

有什么建议吗?谢谢

最佳答案

其中一种方法是在 HttpSessionListener 的帮助下自己收集这些 session :

public class SessionManager implements HttpSessionListener {

    private static Map<String, HttpSession> sessions = new ConcurrentHashMap<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;
        }
    }

}

它允许您在网络管理面板的代码中执行类似的操作:

SessionManager.invalidate(someSessionId);

也许您已经在使用 HttpSessionListener 将 session 与数据库同步。这样一来就完全多余了。

关于Java Remote 终止用户 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099846/

相关文章:

java - JBoss + Hibernate + Faces教程

eclipse - Jersey REST Web 服务、Tomcat、Eclipse 和 404

java - 访问 servlet 上下文中的对象时是否需要同步块(synchronized block)?

java - WS 发送生成的 xml 中的 multiRef

java - 如何在线程和小程序中使用双缓冲

java - 如何获取字符串中的单词?

java - 与 JRXML/Jasper 报告相关的几个查询 - 修复 excel 中的单元格大小,使用 jrxml 中传递的参数

java - 如果字符串数组本身是 ArrayList 的元素,如何从字符串数组中获取元素?

java - 奇怪的解析问题

java - JBoss EAP 6.1 与 Tomcat 7