Tomat:通过 JMX 启动/停止/重新加载应用程序?如何通过程序管理应用程序的启动/停止/重启?

2024-01-30

背景:
我有一个任务要start/stop/reload申请由JMX部署在 tomcat、jboss、weblogic 或 websphere 中。 (人们可能知道提到的Web应用程序服务器已经有管理器页面来实现它,我们只是想集中所有这四个主要的Web服务器管理员'start/stop/reload特征由JMX到一页)。

tomcat的问题:
我有一个名为的示例应用程序JMXWebExample1-0.1。我可以通过输入访问管理页面tomcat/tomcat(username/password)到提示的登录页面,我通过单击应用程序名称旁边的停止按钮看到以下链接。

http://localhost:8080/manager/html/stop;jsessionid=49CDCBA3DDB3081BA3D6C5BCD9E4C8A3?path=/JMXWebExample1-0.1&org.apache.catalina.filters.CSRF_NONCE=59E98C1BA757DD3E7D9FDEA4504D3423

该链接有jsessionid=49CDCBA3DDB3081BA3D6C5BCD9E4C8A3, and CSRF token org.apache.catalina.filters.CSRF_NONCE=59E98C1BA757DD3E7D9FDEA4504D3423.

所以当我调用时,http://localhost:8080/manager/html/stop?path=/JMXWebExample1-0.1,它总是给我 403 状态代码(访问被拒绝)。问题是我怎样才能停止应用程序JMXWebExample1-0.1类似于tomcat管理页面?

启动tomcat之前的一些步骤
在启动tomcat之前我有以下步骤:
1)通过添加%CATALINA_OPTS%启用JMX,

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

2) tomcat-users.xml: 我做了以下配置:

<role rolename="manager-gui"/>
  <user username="tomcat" password="tomcat" roles="manager-gui"/>

3)context.xml位于E:\apache-tomcat-9.0.12\webapps\manager\META-INF\context.xml,我评论以下行:

<Context antiResourceLocking="false" privileged="true" >

 <!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />  -->
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>


Updated:
E:\apache-tomcat-9.0.12\conf\tomcat-users.xml,登录时,我使用tomcat.

<role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="admin-script" />
  <role rolename="manager-gui"/>
  <role rolename="manager-status"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="admin-gui"/>
  <role rolename="admin-jmx" />
  <user username="tomcat" password="tomcat" roles="manager-gui,manager-jmx"/>
  <user username="both" password="both" roles="tomcat,role1"/>
  <user username="role1" password="role1" roles="role1"/>
  <user username="all" password="all" roles="tomcat,role1,manager-script,manager-jmx" />

In E:\apache-tomcat-9.0.12\webapps\manager\META-INF\context.xml:

<Context antiResourceLocking="false" privileged="true" >

 <!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />  -->
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow=".*" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>


调用命令:http://localhost:8080/manager/html/stop?path=/JMXWebExample1-0.1


首先,tomcat提供HTML and JMX必须以不同方式访问的接口。
您正在尝试使用 html ,因此您应该将 POST 请求发送到

/manager 页面受到 CSRF 的保护org.apache.catalina.filters.CSRF_NONCE范围。如果删除,则会收到错误 403 以及说明:

HTML 接口受到 CSRF 保护,但文本和 JMX 接口则不然。要维持 CSRF 保护:

具有 manager-gui 角色的用户不应被授予manager-script or manager-jmx roles.

因此,如果您想停止应用程序,请发送带有有效 CSRF 令牌的 POST 请求。

通过 JMX 停止应用程序
首先,您禁用了身份验证-Dcom.sun.management.jmxremote.authenticate=false,您可能想改变这一点。jconsole可用于通过 JMX 连接到远程应用程序来控制 tomcat<ip address>:9000地址。
然后,要停止应用程序使用Catalina -> WebModuleMBean,你会看到几个可用的操作,找到stop()并使用它:

最后,如图所示the docs https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Remote_Host_Filter,我认为你应该更改验证模式或删除allow根本没有属性。注释掉阀门可能会禁用该功能。

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow=".*"/>

Also, JMX 访问的角色 https://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#Configuring_Manager_Application_Access is manager-jmx.

请注意这里的安全!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomat:通过 JMX 启动/停止/重新加载应用程序?如何通过程序管理应用程序的启动/停止/重启? 的相关文章

  • 无法访问EC2中安装的tomcat实例

    我已在 Ubuntu EC2 实例中安装 tomcat 7 它已启动并正在运行 但我无法使用公共 IP 54 213 225 148 8080 访问它 我还按照之前的帖子中指定的方式设置了安全组 但是 仍然没有运气 对此的任何帮助将不胜感激
  • IntelliJ IDEA 中缺少“更新资源”选项

    我正在使用 tomcat 7 来开发 java web 应用程序 在调试模式下运行tomcat 我在 更新 菜单上没有 更新资源 和 更新类和资源 选项 只有 热插拔类 重新部署 和 重新启动服务器 请问你能帮忙找到他们吗 预先非常感谢 这
  • Tomcat下无法运行PHP脚本

    我正在使用 Tomcat 6 我已经安装了 PHP 并尝试使用 PHP JavaBridge 在 Tomcat 中运行 PHP 我已在 Tomcat 的 webapps 目录中部署了 JavaBridge war 当运行任何 PHP 脚本时
  • 如何检查 MySQL 和 Tomcat 是否正在运行?

    我创建了一个 Java 应用程序 该应用程序分为不同的子组件 每个子组件都在单独的 Tomcat 实例上运行 此外 某些组件通过 Hibernate 使用 MySQL 数据库 我现在正在创建一个管理控制台 在其中报告所有 Tomcat 实例
  • 从 IntelliJ Ultimate 外部运行时,Tomcat 的“服务器日志”在哪里?

    当运行我的Vaadin https en wikipedia org wiki Vaadin app on Tomcat https en wikipedia org wiki Apache Tomcat8 5 外部来自IntelliJ h
  • 读取 HTTPServletRequest 的 POST 正文,然后在 Tomcat 中调用 getParameter

    我的应用程序需要检查 POST 请求的内容 数据 正文 有效负载 而不更改后续 getParameter 调用的结果 从输入流中读取正文 可以使用 InputStream 读取正文request getInputStream或 Buffer
  • 在 tomcat 上部署 AngularJS 应用

    我使用 yeoman 角度生成器创建了一个 AngularJS 应用程序 现在我想使用 Apache tomcat 托管它 我已经运行了 grunt build 并将所有资产准备在 dist 文件夹中 有没有办法创建 war 文件 或者我可
  • 有完整的 tomcat 角色列表吗?

    我希望能够完全访问和控制 tomcat 以使我的开发生活变得简单 我知道角色 admin 和 manager 并且知道还有一些带有连字符的角色 例如 manager gui 但在哪里可以找到包含可用角色描述的完整列表 我什至无法在文档中找到
  • 如何将 JMX 绑定到特定接口?

    我目前正在启动我的 Java VMcom sun management jmxremote 属性 以便我可以通过 JConsole 连接到它进行管理和监控 不幸的是 它监听机器上的所有接口 IP 地址 在我们的环境中 经常会出现多个 Jav
  • Eclipse WTP 与 Tomcat 中干净工作目录和干净工作目录之间的区别

    我正在使用 Eclipse 进行 Java Web 开发 我安装了 WTP 和 Tomcat 我通过 Eclipse 运行 Tomcat 这是一个非常标准的配置 我想了解的是 当您右键单击 服务器 选项卡中的服务器时 它会为您提供两个选项
  • 使用 Java 重新启动 Tomcat

    我需要从 Java 代码重新启动 tomcat 例如 如果某个查询在一段时间内没有执行 那么它将自动重新启动 tomcat 我已经尝试了以下关闭和启动代码 但是当我们关闭tomcat时 java代码将不会运行并且tomcat不会启动 注意
  • NGINX 与 Tomcat 配置

    我是 Nginx 新手 我需要你的帮助 根据很多论坛我了解到我们所有的静态页面都存储在Nginx中 当有请求到来时 我必须将该请求传递给 tomcat 获取数据 并在 tomcat 生成响应后生成响应 目前 我刚刚做到了 我将请求直接传递给
  • 将 JSTL 添加到 jsp (Tomcat 8) [重复]

    这个问题在这里已经有答案了 我想在我的 jsp 中使用 JSTL 库 现在我按照教程进行操作 它告诉我将此行添加到 jsp 页面 它给我错误无法解析 taglib 与 uri 然后是 URL 我正在运行 tomcat 8 我的 web xm
  • 禁用特定的 ServletContextListener 以防止在 tomcat 上启动

    我的项目正在使用spring boot with webflux tomcat 我有一个内部库类 它是ServletContextListener WebListener public class DevIoServletContextLi
  • 从 Web 服务器异步调用应用程序

    我有一个用 Spring 制作的 在 Tomcat 上运行的 Web 应用程序 在同一台机器上有一个普通的 Java 应用程序 我想通过从Web服务器调用Java应用程序来执行它 但我想让应用程序不会使用服务器的资源 它涉及分类器的训练 因
  • Tomcat 8 上的 PHP

    我找到了很多如何让 PHP 在 Tomcat 上运行的指南 但都是以前的版本 我尝试了所有这些 但我所能显示的只是一个空白页面 并且代码仍然没有被触发 我知道 Tomcat 是为 Java 应用程序而不是 PHP 构建的 但我需要找到一种使
  • 使用 Netty 将 websocket 与在 tomcat 中运行的 Spring Web 应用程序集成

    我有一个使用 Netty 的 Web 套接字服务器实现 例如监听端口 8081 和一个在 Tomcat 中运行的单独的 Spring Web 应用程序 在端口 80 中运行 我想以某种方式将所有来自 localhost 80 Websock
  • Tomcat 托管具有多个 SSL 证书的多个虚拟主机

    例如 我有一台使用 Tomcat 7 托管多个网站的服务器 a abc com b abc com c def com d def com 使用tomcat的虚拟主机功能 因此它们各自可能属于不同的webapps文件夹 我们现在正在尝试为每
  • org.apache.tomcat.jdbc.pool.DataSource 不再位于 tomcat 7 dbcp jar 中?

    我正在尝试使用 tomcat dbcp jar 版本 7 0 30 为 tomcat dbcp 创建一个 spring 管理的独立池 然而 Tomcat的文档中提到的似乎是org apache tomcat jdbc DataSource类
  • 我想创建处理程序来捕获 Tomcat 上 Web 应用程序的所有日志,并且

    我想创建处理程序来捕获 Tomcat 上 Web 应用程序的所有日志 我创建了我的 Handler 类 编译它并安装 CATALINA HOME lib and common loader有这个目录 之后我修改了logging proper

随机推荐