How to invalidate selected session programmatically?

最后都变了- 提交于 2019-12-18 09:43:06

问题


I'm trying to invalidate selected session (with given sessionId) from my web application runing on Jboss 4.2. Everything works perfect from JMX console but I don't know how to do the same in java code. Here is what i have already created:

MBeanServer server=MBeanServerLocator.locateJBoss();
ObjectName objectName = new ObjectName("jboss.web:host=localhost,path=/,type=Manager");

ManagerBase manager = (ManagerBase)MBeanServerInvocationHandler.newProxyInstance(server, objectName, Manager.class, false);
manager.expireSession("sessionID");

But this code gives this exception:

Caused by: java.lang.ClassCastException: com.sun.proxy.$Proxy574 cannot be cast to org.apache.catalina.session.ManagerBase

Can You help me?


回答1:


You have to collect the session in a map check following link :

  • How can i load Java HttpSession from JSESSIONID?
  • Find number of active sessions created from a given client IP
  • How to easily implement "who is online" in Grails or Java Application?



回答2:


If you are still looking for the answer. That snippet works for me:

        MBeanServer server = java.lang.management.ManagementFactory.getPlatformMBeanServer();

        ObjectName objectName=new ObjectName("jboss.web:type=Manager,path=/test,host=default-host");

        // declare signature of the parameter
        String[] sig = { "java.lang.String"};
        // your session id e.g. A7rOCAlFa+9uCeUfYNjJpd3r.undefined
        Object[] opArgs1 = { sessionID };
        // call the method
        String value = (String) server.invoke(objectName, "expireSession",
                opArgs1, sig);

I am working on JBoss-7.1.1.Final. My application is called "test", hence the context root "/test". You should create objectName with name of your application.



来源:https://stackoverflow.com/questions/17724004/how-to-invalidate-selected-session-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!