如何以编程方式使所选会话无效?

我正在尝试使用在Jboss 4.2上运行的Web应用程序使选定的会话(使用给定的sessionId)无效。 从JMX控制台一切都很完美,但我不知道如何在java代码中做同样的事情。 这是我已经创建的:

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"); 

但是这段代码给出了这个例外:

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

你能帮助我吗?

您必须在地图检查以下链接中收集会话:

  • 如何从JSESSIONID加载Java HttpSession?
  • 查找从给定客户端IP创建的活动会话数
  • 如何在Grails或Java Application中轻松实现“谁在线”?

如果你还在寻找答案。 该片段对我有用:

  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 eg A7rOCAlFa+9uCeUfYNjJpd3r.undefined Object[] opArgs1 = { sessionID }; // call the method String value = (String) server.invoke(objectName, "expireSession", opArgs1, sig); 

我正在研究JBoss-7.1.1.Final。 我的应用程序称为“test”,因此上下文根“/ test”。 您应该使用应用程序的名称创建objectName。