【发布时间】:2019-05-08 03:38:38
【问题描述】:
背景:
我的任务是通过JMX 部署在tomcat、jboss、weblogic 或websphere 中的start/stop/reload 应用程序。 (大家可能知道上面提到的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和CSRF token org.apache.catalina.filters.CSRF_NONCE=59E98C1BA757DD3E7D9FDEA4504D3423。
所以当我调用 http://localhost:8080/manager/html/stop?path=/JMXWebExample1-0.1 时,它总是给我 403 状态码(拒绝访问)。 问题是如何停止类似于 tomcat 管理器页面的应用程序JMXWebExample1-0.1?
启动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) E:\apache-tomcat-9.0.12\webapps\manager\META-INF\context.xml 下的 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>
更新: 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" />
在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
【问题讨论】: