简体   繁体   中英

Connection to Tomcat JMX server failing

Failing to connect to Tomcat JMX instance

Ok i am stuck now - Im trying to configure JMX with Tomcat as follows

$CATALINA_BASE/setenv.sh :

CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=18070 -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access"
export CATALINA_OPTS

$CATALINA_BASE/conf/jmxremote.password

    monitorRole monitorpass
    controlRole controlpass

$CATALINA_BASE/conf/jmxremote.access

    monitorRole readonly
    controlRole readwrite

The client tool i am using to access the Tomcat JMX server is running on the same machine as the Tomcat instance. when i start tomcat i can see that there is something listening at port 18070 but when i try to connect i get the following error

    Exception in thread "main" java.lang.SecurityException: Authentication failed! Credentials required
            at com.sun.jmx.remote.security.JMXPluggableAuthenticator.authenticationFailure(JMXPluggableAuthenticator.java:193)
            at com.sun.jmx.remote.security.JMXPluggableAuthenticator.authenticate(JMXPluggableAuthenticator.java:145)
            at sun.management.jmxremote.ConnectorBootstrap$AccessFileCheckerAuthenticator.authenticate(ConnectorBootstrap.java:185)
            at javax.management.remote.rmi.RMIServerImpl.doNewClient(RMIServerImpl.java:213)

I connect using the following bit of code

            try {
                url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:18070/jmxrmi");
                jmxc = JMXConnectorFactory.connect(url,null); 
                mbsc = jmxc.getMBeanServerConnection();             
            } catch (MalformedURLException e) {
                throw new Exception(methodName + ":" + e);
            } catch (IOException e) {
                throw new Exception(methodName + ":" + "Failed to connect to the Tomcat Server " + e);
            }

It works fine if i set com.sun.management.jmxremote.authenticate=true to false. Other than that it just fails. The client tool is running on the same machine as the tomcat instance so there should not be any issues with the firewall. Any clues

This

JMXServiceURL url = ...;
Map env = ...;
String[] creds = {"monitorRole", "mrpasswd"};
env.put(JMXConnector.CREDENTIALS, creds);
JMXConnector cc = JMXConnectorFactory.connect(url, env);
MBeanServerConnection mbsc = cc.getMBeanServerConnection();

from http://blogs.oracle.com/lmalventosa/entry/jmx_authentication_authorization

should help

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM