无法禁用远程 Spring 引导 JMX 访问
Cannot disable remote Spring Boot JMX access
我们有一个 Spring 带执行器的启动应用程序。我们试图禁用远程 JMX 访问,但不知何故这不起作用。我们尝试了以下设置:
在 Tomcat 启动选项中:
-Dcom.sun.management.jmxremote=false
-Dcom.sun.management.jmxremote.password.file=....../jmxremote.password
-Dcom.sun.management.jmxremote.registry.ssl=true
-Djava.security.manager
-Djava.security.policy=jmx.policy
-Djavax.net.ssl.keyStore=....jks
-Djavax.net.ssl.keyStorePassword=****
-Djavax.net.ssl.trustStore=.....jks
-Djavax.net.ssl.trustStorePassword=****
在application.properties中:
spring.jmx.enabled=false
spring.datasource.jmx-enabled=false
endpoints.jmx.enabled=false
spring.jmx.server=localhost
但是,我们仍然可以从远程系统访问 JMX。选项 spring.jmx.enabled
的唯一区别是 Spring 特定的 MBean 不可用,但其他 MBean 仍然可用。
我们如何禁用对 JMX 的远程访问?理想情况下,我们仍然希望从本地计算机连接时可以访问,但如果有必要,也可以禁用它。
已添加
build.gradle
buildscript {
ext {
springBootVersion = '1.5.16.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply from: "../dependencies.gradle"
repositories {
mavenCentral()
}
bootRepackage {
enabled = false
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
providedRuntime project(':....')
compile project(':...')
compile project(':...')
compile project(':...')
compile project(':...')
compile group: 'com.hazelcast', name: 'hazelcast', version: '3.12'
compile group: 'com.hazelcast', name: 'hazelcast-client', version: '3.12'
compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.11.Final'
compile group: 'org.aspectj', name: 'aspectjweaver', version: '1.9.2'
compile group: 'org.apache.poi', name: 'poi', version: '4.0.1'
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.0.1'
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.2'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-actuator")
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile group: 'org.mockito', name: 'mockito-all', version: '1.9.5'
}
有完全相同的问题并使用这些设置解决了它:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.local.only=true
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.host=localhost
-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote.password.file=<path to jmxremote.password>
-Dcom.sun.management.jmxremote.access.file=<path to jmxremote.access>
请注意,命令和显式设置属性为其默认值可能是必要的,即使它显然不应该。
根据 Diederik 的解决方案,需要更改两个属性
将身份验证设置为真。并指定 password.file 和 access.file.
将主机设置为本地主机或 127.0.0.1。
如果 authenticate 为 false 或 host 不是 localhost,将启用远程访问。
这是一个示例
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=1099 \
-Dcom.sun.management.jmxremote.host=localhost \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=<path to password file> \
-Dcom.sun.management.jmxremote.access.file=<path to access file> \
-Dcom.sun.management.jmxremote.ssl=false \
我们有一个 Spring 带执行器的启动应用程序。我们试图禁用远程 JMX 访问,但不知何故这不起作用。我们尝试了以下设置:
在 Tomcat 启动选项中:
-Dcom.sun.management.jmxremote=false
-Dcom.sun.management.jmxremote.password.file=....../jmxremote.password
-Dcom.sun.management.jmxremote.registry.ssl=true
-Djava.security.manager
-Djava.security.policy=jmx.policy
-Djavax.net.ssl.keyStore=....jks
-Djavax.net.ssl.keyStorePassword=****
-Djavax.net.ssl.trustStore=.....jks
-Djavax.net.ssl.trustStorePassword=****
在application.properties中:
spring.jmx.enabled=false
spring.datasource.jmx-enabled=false
endpoints.jmx.enabled=false
spring.jmx.server=localhost
但是,我们仍然可以从远程系统访问 JMX。选项 spring.jmx.enabled
的唯一区别是 Spring 特定的 MBean 不可用,但其他 MBean 仍然可用。
我们如何禁用对 JMX 的远程访问?理想情况下,我们仍然希望从本地计算机连接时可以访问,但如果有必要,也可以禁用它。
已添加 build.gradle
buildscript {
ext {
springBootVersion = '1.5.16.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply from: "../dependencies.gradle"
repositories {
mavenCentral()
}
bootRepackage {
enabled = false
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
providedRuntime project(':....')
compile project(':...')
compile project(':...')
compile project(':...')
compile project(':...')
compile group: 'com.hazelcast', name: 'hazelcast', version: '3.12'
compile group: 'com.hazelcast', name: 'hazelcast-client', version: '3.12'
compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.11.Final'
compile group: 'org.aspectj', name: 'aspectjweaver', version: '1.9.2'
compile group: 'org.apache.poi', name: 'poi', version: '4.0.1'
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.0.1'
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.2'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-actuator")
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile group: 'org.mockito', name: 'mockito-all', version: '1.9.5'
}
有完全相同的问题并使用这些设置解决了它:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.local.only=true
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.host=localhost
-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote.password.file=<path to jmxremote.password>
-Dcom.sun.management.jmxremote.access.file=<path to jmxremote.access>
请注意,命令和显式设置属性为其默认值可能是必要的,即使它显然不应该。
根据 Diederik 的解决方案,需要更改两个属性
将身份验证设置为真。并指定 password.file 和 access.file.
将主机设置为本地主机或 127.0.0.1。
如果 authenticate 为 false 或 host 不是 localhost,将启用远程访问。
这是一个示例
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=1099 \
-Dcom.sun.management.jmxremote.host=localhost \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=<path to password file> \
-Dcom.sun.management.jmxremote.access.file=<path to access file> \
-Dcom.sun.management.jmxremote.ssl=false \