有没有办法阻止使用Java和JMX?
我想有一个托管bean可以用于此吗?
发布于 2015-12-25 15:01:54
就其本身而言,Tomcat不具备从JMX运行关机操作的能力,基本上是不安全的!但是,如果您真的需要它,您需要创建您自己的ShutdownMBean。创建MBean并在应用程序部署中注册它是非常简单和直接的过程。让我们首先创建ShutdownMBean whch将有名称,并将公开一个doShutdown()操作。
public interface ShutdownMBean {
void doShutdown();
String getName();
}实现也很简单,只需将SHUTDOWN信号发送到Tomcat的默认关闭端口即可。
public class Shutdown implements ShutdownMBean{
@Override
public void doShutdown() {
try {
Socket clientSocket = new Socket("localhost", 8005);
clientSocket.getOutputStream().write("SHUTDOWN".getBytes());
clientSocket.getOutputStream().close();
clientSocket.close();
} catch (IOException e) {
}
}
@Override
public String getName() {
return "Shutdown JMX Hook";
}
}最后,只需在上下文初始化之后注册ShutdownMBean (我假设您使用的是Tomcat 7+):
@WebListener
public class ShutdownListener implements javax.servlet.ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
try {
ShutdownMBean shutdownMBean = new Shutdown();
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("com.example:type=Shutdown");
server.registerMBean(shutdownMBean, name);
} catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException | MalformedObjectNameException e) {
}
}
}就是这样,只需部署应用程序,使用JConsole连接到Tomcat,就可以在com.example组下找到doShutdown操作。
https://stackoverflow.com/questions/34393348
复制相似问题