我们有一些运行的代码:
JMXConnectorFactory.connect(domainServiceURL, hashTable);
“哈希表”包含以下内容(以及3个超时值,此处不包括):
Hashtable<String, Object> hashTable = new Hashtable<String, Object>();
hashTable.put(WLContext.SECURITY_PRINCIPAL, username);
hashTable.put(WLContext.SECURITY_CREDENTIALS, password);
hashTable.put(WLContext.SECURITY_PROTOCOL, "ssl");
hashTable.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,
"weblogic.management.remote");
用户名是“ ADMIN_USER”。
在许多情况下,此代码有效。但是,在经过特定的代码路径(太多粘贴)之后,它将引发以下异常:
java.io.IOException: User USER2/GROUP1/GROUP2/ROLE1/ROLE2 does not have access to the administrator port.
at weblogic.management.remote.common.ClientProviderBase.makeConnection(ClientProviderBase.java:244)
at weblogic.management.remote.common.ClientProviderBase.newJMXConnector(ClientProviderBase.java:120)
at javax.management.remote.JMXConnectorFactory.newJMXConnector(JMXConnectorFactory.java:369)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:267)
...
注意,我已经通过日志语句确认,在两种情况下,我们仍将ADMIN_USER传递给connect方法。但是,该异常而是指向USER2。
我被告知Weblogic代码可以使用某些系统属性并更改其行为,但是我还比较了System.getenv()
的工作时间和无效的时间,没有发现任何差异。还要注意,USER2在密钥库ssl.properties文件中,但是我看不到设置了任何一种SSL变量,这种变量会使connect方法在一种情况下使用该变量,而在另一种情况下不使用该变量。
我还尝试使用JMXConnector.CREDENTIALS
代替上面的2个属性,并且没有变化。
似乎有些东西在重写(或添加)提供给connect方法的凭据。但是,正如我提到的,使这种情况发生的代码路径相当广泛,所以也许有人知道什么样的事情可能会覆盖登录凭据?