org.apache.tomcat.jdbc.pool.jmx.JmxUtil.registerJmx Jmx 注册失败
Posted
技术标签:
【中文标题】org.apache.tomcat.jdbc.pool.jmx.JmxUtil.registerJmx Jmx 注册失败【英文标题】:org.apache.tomcat.jdbc.pool.jmx.JmxUtil.registerJmx Jmx registration failed 【发布时间】:2021-04-16 08:50:02 【问题描述】:我想将部署 spring-boot 应用程序部署到外部 tomcat启用安全管理器。 Jndi 在 tomcat 中配置,名称为 jdbc/abc 。当我部署时,tomcat 会要求一些权限,我在 tomcat 的 catalina.policy 中授予这些权限。我目前收到一些拒绝访问的消息,如下所示。
org.apache.tomcat.jdbc.pool.jmx.JmxUtil.registerJmx Jmx registration failed.
java.security.AccessControlException: access denied ("javax.management.MBeanPermission" "org.apache.tomcat.jdbc.pool.PooledConnection#-[tomcat.jdbc:class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[0],name="jdbc/abc",type=ConnectionPool]" "registerMBean")
然后我授予权限
permission javax.management.MBeanPermission "org.apache.tomcat.jdbc.pool.PooledConnection#-[tomcat.jdbc:class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[0],name=jdbc/abc ,type=ConnectionPool]", "registerMBean";
然后再次在服务器输出中重复该消息,我不确定我是否以正确的方式授予了此权限? 谁能建议我哪里做错了?
连接池的服务器配置如下:
<Resource name="jdbc/abc"
type="javax.sql.DataSource"
url="url to the database"
username="MyName"
password="123"
/>
【问题讨论】:
任何 cmets 都会有所帮助 【参考方案1】:这可能应该被认为是Tomcat JDBC 库中的一个错误:容器提供的DataSource
应该使用AccessController.doPriviledged
来执行JMX 操作。它还应该提供一组权限来规范从应用程序代码到DataSource
的访问。然而,由于SecurityManager
可能会被弃用(参见JEP 411),我怀疑这个错误是否会得到解决。
由于 Tomcat JDBC 注册了许多 JMX bean,我将授予所有 org.tomcat.jdbc
类在 tomcat.jdbc
域中注册任何 MBean 的权限:
permission javax.management.MBeanPermission "org.apache.tomcat.jdbc.*#-[tomcat.jdbc:*]", "registerMBean";
MBeanPermission
是通过以下方式授予的:
permission javax.management.MBeanPermission "class name#member[object name]", "action"
(参见Javadoc),其中:
类名 是执行调用的类。在您的情况下,所有 Tomcat JDBC 类, member是你要访问的JMX属性,不适用于registerMBean
动作,
对象名称 是ObjectName
模式(参见Javadoc):在您的情况下,tomcat.jdbc
域中的所有名称,
action 是要执行的操作:在您的情况下,Tomcat JDBC 想要向服务器注册一个 MBean。
您也可以尝试更严格的ObjectName
s,例如tomcat.jdbc:name=jdbc/abc,*
将权限仅限于一个数据源。
备注:如果您不打算使用 JMX 来监控您的数据源性能,您也可以使用jmxEnabled="false"
(参见documentation),所有权限问题都会消失。
【讨论】:
以上是关于org.apache.tomcat.jdbc.pool.jmx.JmxUtil.registerJmx Jmx 注册失败的主要内容,如果未能解决你的问题,请参考以下文章