You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by ma...@apache.org on 2019/05/06 12:23:16 UTC
[kafka] branch trunk updated: KAFKA-7455: Support JmxTool to
connect to a secured RMI port. (#5968)
This is an automated email from the ASF dual-hosted git repository.
manikumar pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new 0c62f5e KAFKA-7455: Support JmxTool to connect to a secured RMI port. (#5968)
0c62f5e is described below
commit 0c62f5e664e30e44af341cc38605bd5cfb498272
Author: Fangbin Sun <su...@gmail.com>
AuthorDate: Mon May 6 20:22:53 2019 +0800
KAFKA-7455: Support JmxTool to connect to a secured RMI port. (#5968)
Reviewers: Attila Sasvari <as...@apache.org>, Manikumar Reddy <ma...@gmail.com>
---
core/src/main/scala/kafka/tools/JmxTool.scala | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/core/src/main/scala/kafka/tools/JmxTool.scala b/core/src/main/scala/kafka/tools/JmxTool.scala
index 9451cc2..d035692 100644
--- a/core/src/main/scala/kafka/tools/JmxTool.scala
+++ b/core/src/main/scala/kafka/tools/JmxTool.scala
@@ -22,6 +22,7 @@ import java.util.{Date, Objects}
import java.text.SimpleDateFormat
import javax.management._
import javax.management.remote._
+import javax.rmi.ssl.SslRMIClientSocketFactory
import joptsimple.OptionParser
@@ -82,6 +83,16 @@ object JmxTool extends Logging {
.describedAs("report-format")
.ofType(classOf[java.lang.String])
.defaultsTo("original")
+ val jmxAuthPropOpt = parser.accepts("jmx-auth-prop", "A mechanism to pass property in the form 'username=password' " +
+ "when enabling remote JMX with password authentication.")
+ .withRequiredArg
+ .describedAs("jmx-auth-prop")
+ .ofType(classOf[String])
+ val jmxSslEnableOpt = parser.accepts("jmx-ssl-enable", "Flag to enable remote JMX with SSL.")
+ .withRequiredArg
+ .describedAs("ssl-enable")
+ .ofType(classOf[java.lang.Boolean])
+ .defaultsTo(false)
val waitOpt = parser.accepts("wait", "Wait for requested JMX objects to become available before starting output. " +
"Only supported when the list of objects is non-empty and contains no object name patterns.")
val helpOpt = parser.accepts("help", "Print usage information.")
@@ -109,6 +120,9 @@ object JmxTool extends Logging {
val reportFormat = parseFormat(options.valueOf(reportFormatOpt).toLowerCase)
val reportFormatOriginal = reportFormat.equals("original")
+ val enablePasswordAuth = options.has(jmxAuthPropOpt)
+ val enableSsl = options.has(jmxSslEnableOpt)
+
var jmxc: JMXConnector = null
var mbsc: MBeanServerConnection = null
var connected = false
@@ -117,7 +131,18 @@ object JmxTool extends Logging {
do {
try {
System.err.println(s"Trying to connect to JMX url: $url.")
- jmxc = JMXConnectorFactory.connect(url, null)
+ val env = new java.util.HashMap[String, AnyRef]
+ // ssl enable
+ if (enableSsl) {
+ val csf = new SslRMIClientSocketFactory
+ env.put("com.sun.jndi.rmi.factory.socket", csf)
+ }
+ // password authentication enable
+ if (enablePasswordAuth) {
+ val credentials = options.valueOf(jmxAuthPropOpt).split("=", 2)
+ env.put(JMXConnector.CREDENTIALS, credentials)
+ }
+ jmxc = JMXConnectorFactory.connect(url, env)
mbsc = jmxc.getMBeanServerConnection
connected = true
} catch {