1 Reply Latest reply on Jul 14, 2011 4:13 AM by Wolfgang Knauf

    SecurityException trying to make a JMX connection to remote server

    Lynn Owens Newbie

      Hello,

       

      I'm just trying to proof out getting a JMX connection to a remote server, but I'm getting the following error:

       

      Exception in thread "main" java.lang.SecurityException: Failed to authenticate principal=null, securityDomain=jmx-console

              at org.jboss.jmx.connector.invoker.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:88)

              at org.jboss.mx.server.Invocation.invoke(Invocation.java:90)

              at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)

              at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)

              at org.jboss.invocation.jrmp.server.JRMPProxyFactory.invoke(JRMPProxyFactory.java:180)

              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

              at java.lang.reflect.Method.invoke(Method.java:597)

              at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)

              at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)

              at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)

              at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)

              at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)

              at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:855)

              at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:422)

              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

              at java.lang.reflect.Method.invoke(Method.java:597)

              at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)

              at sun.rmi.transport.Transport$1.run(Transport.java:159)

              at java.security.AccessController.doPrivileged(Native Method)

              at sun.rmi.transport.Transport.serviceCall(Transport.java:155)

              at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)

              at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)

              at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)

              at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

              at java.lang.Thread.run(Thread.java:619)

              at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)

              at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)

              at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)

              at org.jboss.invocation.jrmp.server.JRMPInvoker_Stub.invoke(Unknown Source)

              at org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy.invoke(JRMPInvokerProxy.java:133)

              at org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerInterceptor.java:365)

              at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:197)

              at org.jboss.jmx.connector.invoker.client.InvokerAdaptorClientInterceptor.invoke(InvokerAdaptorClientInterceptor.java:66)

              at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:68)

              at org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)

              at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:101)

              at $Proxy0.getAttribute(Unknown Source)

              at com.dstsystems.middleware.jbossjmxtest.JMXTest1.main(JMXTest1.java:45)

       

      This is my code:

       

      public class JMXTest1

      {

        public static void main(String[] args) throws Exception

        {

          Hashtable<String, String> env = new Hashtable<String, String>();

          String ipAddr = "170.40.60.7";

          InitialContext ic;

          ObjectName serverinfo = new ObjectName( "jboss.system:type=ServerInfo" );

       

          // Establish Initial Context

          env.put( Context.PROVIDER_URL, ipAddr );

          env.put( Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory" );

          env.put( Context.URL_PKG_PREFIXES, "org.jnp.interfaces" );

          ic = new InitialContext( env );

       

           // Connect to MBeanServer

          RMIAdaptor server = (RMIAdaptor) ic.lookup( "jmx/invoker/RMIAdaptor" );

         

          System.out.println( "Free memory is: " + server.getAttribute( serverinfo, "FreeMemory" ) );

        }

      }

       

      Based on what I read on these forums, I need to make a "JAAS login" ??   I tried to do that with the following:

       

      public class JMXTest1

      {

        public static void main(String[] args) throws Exception

        {

          Hashtable<String, String> env = new Hashtable<String, String>();

          String ipAddr = "170.40.60.7";

          InitialContext ic;

          ObjectName serverinfo = new ObjectName( "jboss.system:type=ServerInfo" );

       

          // Establish Initial Context

          env.put( Context.PROVIDER_URL, ipAddr );

          env.put( Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory" );

          env.put( Context.URL_PKG_PREFIXES, "org.jnp.interfaces" );

          ic = new InitialContext( env );

       

          // JAAS Login

          Principal principal = (Principal) new JMXPrincipal( "jboss" );

          Object credential = (Object) new String( "dstadmin" );

          JaasSecurityManager jsm1 = ( JaasSecurityManager ) ic.lookup( "java:/jaas/jmx-console" );

          String securityDomain = jsm1.getSecurityDomain();

          SecurityAssociationHandler handler = new org.jboss.security.auth.callback.SecurityAssociationHandler();

          handler.setSecurityInfo( principal, credential );

          LoginContext lc = new LoginContext( securityDomain, handler );

          lc.login();

       

          // Connect to MBeanServer

          RMIAdaptor server = (RMIAdaptor) ic.lookup( "jmx/invoker/RMIAdaptor" );

         

          System.out.println( "Free memory is: " + server.getAttribute( serverinfo, "FreeMemory" ) );

        }

      }

       

      But now I'm getting a different error:

       

      Exception in thread "main" javax.naming.NameNotFoundException: jaas not bound

              at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)

              at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)

              at org.jnp.server.NamingServer.getObject(NamingServer.java:785)

              at org.jnp.server.NamingServer.lookup(NamingServer.java:396)

              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

              at java.lang.reflect.Method.invoke(Method.java:597)

              at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)

              at sun.rmi.transport.Transport$1.run(Transport.java:159)

              at java.security.AccessController.doPrivileged(Native Method)

              at sun.rmi.transport.Transport.serviceCall(Transport.java:155)

              at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)

              at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)

              at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)

              at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

              at java.lang.Thread.run(Thread.java:619)

              at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)

              at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)

              at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)

              at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)

              at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:726)

              at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686)

              at javax.naming.InitialContext.lookup(InitialContext.java:392)

              at com.dstsystems.middleware.jbossjmxtest.JMXTest1.main(JMXTest1.java:32)