【问题标题】:Stop Apache Tomcat using JMX使用 JMX 停止 Apache Tomcat
【发布时间】:2015-12-25 23:01:54
【问题描述】:

有什么方法可以阻止使用 Java 和 JMX 的 Apache Tomcat?

我想有一个可用于此的托管 bean?

【问题讨论】:

  • 也许你可以使用 Runtime 类来执行停止 Tomcat 的命令,就像你从命令行做的那样。
  • 这对我来说似乎是一个巨大的安全漏洞。
  • 你能给我看一些Java代码示例吗?
  • 关闭Tomcat的目的是什么?我有一个 Java 独立应用程序,它使用 ant 任务在本地管理一个 tomcat 守护进程,following official Tomcat documentation,如果你有兴趣,我可以给你示例代码。
  • 我只想拥有这个功能。你能给我看一些关于 Java 和 JMX 的例子吗?

标签: java tomcat7 jmx tomcat8


【解决方案1】:

Tomcat本身不具备从JMX运行的关机功能,基本上是不安全的!!!但如果你真的需要它,你需要创建自己的ShutdownMBean。创建MBean 并在应用程序部署时注册它是非常简单直接的过程。 让我们首先创建ShutdownMBean,它有名字并且会暴露一个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 操作

【讨论】:

    猜你喜欢
    • 2013-04-29
    • 2013-05-17
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2020-06-13
    • 2010-12-13
    • 2014-12-07
    • 2012-01-07
    相关资源
    最近更新 更多