2016-12-14 12 views
5

मैं शुरू/JMX के माध्यम से एक Jboss ईएपी 5.1 पर एक webapp (युद्ध) को रोकने के लिए एक यूआई उपकरण बनाने के लिए कोशिश कर रहा हूँ, लेकिन मैं सुरक्षा के साथ एक मुद्दा है// JMX के माध्यम से युद्ध रोकने के डब्ल्यू JBoss ईएपी 5.1

public class jmx_console { 
    // 
    private static final Logger log = Logger.getLogger(jmx_console.class); 

    // 
    public static String startAndStopQueueManager(String jnpUrl, String qmUrl, String action, String username, String password) throws NamingException, MalformedObjectNameException, InstanceNotFoundException, MBeanException, ReflectionException, 
      IOException, AttributeNotFoundException { 
     // 
     log.debug("username: " + username); 
     log.debug("password: " + password); 
     log.debug("action: " + action); 
     log.debug("qmUrl: " + qmUrl); 
     log.debug("jnpUrl: " + jnpUrl); 
     // 
     System.setProperty("java.security.policy", "client.policy"); 
     if (System.getSecurityManager() == null) { 
      System.setSecurityManager(new RMISecurityManager()); 
     } 
     // 
     Properties ht = new Properties(); 
     ht.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
     ht.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); 
     ht.put(Context.PROVIDER_URL, jnpUrl); 
     ht.put(Context.SECURITY_PRINCIPAL, username); 
    ht.put(Context.SECURITY_CREDENTIALS, password); 
     Context ctx = new InitialContext(ht); 
     MBeanServerConnection mbeanConn = (MBeanServerConnection) ctx.lookup("jmx/invoker/RMIAdaptor"); 
     ObjectName queueManagerObjectManager = new ObjectName(qmUrl); 
     mbeanConn.invoke(queueManagerObjectManager, action, null, null); 
     return (String) mbeanConn.getAttribute(queueManagerObjectManager, "StateString"); 
    } 

    public static void main(String[] args) { 
     try { 
      startAndStopQueueManager(args[0], args[1], args[2], args[3], args[4]); 
     } catch (Exception e) { 
      log.debug(ExceptionUtils.getStackTrace(e)); 
     } 
    } 
} 

args: स्थानीय होस्ट: 1099, jboss.web.deployment: युद्ध =/QueueManager,, शुरू व्यवस्थापक, व्यवस्थापक

और कहा कि अपवाद है:

14 12 2016 11:56:00,372 DEBUG it.m2sc.utility.jmx_console: 31 - username: admin 
14 12 2016 11:56:00,373 DEBUG it.m2sc.utility.jmx_console: 32 - password: admin 
14 12 2016 11:56:00,373 DEBUG it.m2sc.utility.jmx_console: 33 - action: start 
14 12 2016 11:56:00,373 DEBUG it.m2sc.utility.jmx_console: 34 - qmUrl: jboss.web.deployment:war=/QueueManager 
14 12 2016 11:56:00,373 DEBUG it.m2sc.utility.jmx_console: 35 - jnpUrl: LCES4DISP:1099 
14 12 2016 11:56:00,411 DEBUG it.m2sc.utility.jmx_console: 59 - javax.naming.CommunicationException: Could not obtain connection to any of these urls: LCES4DISP:1099 and discovery failed with error: java.security.AccessControlException: access denied (java.net.SocketPermission 230.0.0.4 connect,accept,resolve) [Root exception is javax.naming.CommunicationException: Failed to connect to server LCES4DISP:1099 [Root exception is java.security.AccessControlException: access denied (java.net.SocketPermission LCES4DISP resolve)]] 
    at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1727) 
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:680) 
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:673) 
    at javax.naming.InitialContext.lookup(InitialContext.java:392) 
    at it.m2sc.utility.jmx_console.startAndStopQueueManager(jmx_console.java:49) 
    at it.m2sc.utility.jmx_console.main(jmx_console.java:57) 
Caused by: javax.naming.CommunicationException: Failed to connect to server LCES4DISP:1099 [Root exception is java.security.AccessControlException: access denied (java.net.SocketPermission LCES4DISP resolve)] 
    at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:311) 
    at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1698) 
    ... 5 more 
Caused by: java.security.AccessControlException: access denied (java.net.SocketPermission LCES4DISP resolve) 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) 
    at java.security.AccessController.checkPermission(AccessController.java:549) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1031) 
    at java.net.InetAddress.getAllByName0(InetAddress.java:1172) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1110) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1046) 
    at java.net.InetAddress.getByName(InetAddress.java:996) 
    at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory.java:81) 
    at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:277) 
    ... 6 more 

आप मुझे इस मुद्दे toubleshooting मदद कर सकते हैं?

+0

आप एक सुरक्षा प्रबंधक सेट करते हैं? –

+0

हाँ, मैंने पैरामीटर लॉगिंग के बाद किया था। –

+0

नीति फ़ाइल System.setProperty ("java.security.policy", "फ़ाइल: //absolute/path/to/client.policy") पर पूर्ण पथ सेट करने का प्रयास करें; इसके अलावा आप सिस्टम विकल्प -Djava.security.debug = एक्सेस जोड़ सकते हैं, विफलता आउटपुट में somethin दिलचस्प के लिए देखो। –

उत्तर

2

मुझे लगता है कि समस्या आपकी सुरक्षा नीति के साथ है। अधिक जानकारी http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html

- नीति फ़ाइल ठीक से निर्दिष्ट करते हैं, या तो एक कमांडलाइन ध्वज के साथ:

java -Djava.security.policy=/home/.../<filename>.policy ... 

या

System.setProperty("java.security.policy","file:///home/.../<filename>.policy"); 

आप भी अपनी परियोजना के रूप में एक ही फ़ोल्डर में डाल दिया जा सकता है रूट), यूआरआई को file:./<filename>.policy तक कम करने के लिए।

- सुनिश्चित करें कि नीति फ़ाइल का स्वरूप सही है, उदा .:

grant codeBase "file:<path>/bin/-" { 
    permission java.security.AllPermission; 
}; 
संबंधित मुद्दे