Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 骆驼+;JMX+;使用org.apache.camel.jmx.createRmiConnector进行LDAP身份验证_Apache Camel_Jmx_Jaas - Fatal编程技术网

Apache camel 骆驼+;JMX+;使用org.apache.camel.jmx.createRmiConnector进行LDAP身份验证

Apache camel 骆驼+;JMX+;使用org.apache.camel.jmx.createRmiConnector进行LDAP身份验证,apache-camel,jmx,jaas,Apache Camel,Jmx,Jaas,全部 一直在尝试使用JAAS身份验证让远程JMX在Camel版本2.10.3+Java6中工作 该应用程序使用Java DSL,“手动连接”,并使用系统属性运行: -Dcom.sun.management.jmxremote.authenticate=true -Djmx.remote.x.login.config=StagingJmxAuthConfig -Dorg.apache.camel.jmx.usePlatformMBeanServer=true -Djava.security.

全部

一直在尝试使用JAAS身份验证让远程JMX在Camel版本2.10.3+Java6中工作

该应用程序使用Java DSL,“手动连接”,并使用系统属性运行:

-Dcom.sun.management.jmxremote.authenticate=true 
-Djmx.remote.x.login.config=StagingJmxAuthConfig 
-Dorg.apache.camel.jmx.usePlatformMBeanServer=true 
-Djava.security.auth.login.config=./src/main/resources/conf/ldap-auth.config 
-Dcom.sun.management.jmxremote.ssl=false
-Dorg.apache.camel.jmx.createRmiConnector=true
-Dorg.apache.camel.jmx.rmiConnector.registryPort=9140
然而,出于所有的意图和目的,我似乎也可以在身份验证/授权关闭的情况下运行

在JRE的JMX和JAAS类(以及Camel)中调试时,请注意以下几点:

在类
org.apache.camel.management.DefaultManagementAgent
中:

cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);
这随后又创建了
javax.management.remote.rmi.RMIJRMPServerImpl
的实例,其中
env
构造函数参数的映射为空

现在,我想知道是不是有什么事情让我不知所措——当一个请求稍后到达连接器时,
javax.management.remote.rmi.rmiservempl
执行了一个
doNewClient()
,它不可能触发任何JAAS活动

RMIServerImpl的第197-208行-记住Camel将“env”设置为
null
,并将其转换为空映射:

JMXAuthenticator authenticator =
    (JMXAuthenticator) env.get(JMXConnectorServer.AUTHENTICATOR);
if (authenticator == null) {
    /*
     * Create the JAAS-based authenticator only if authentication
     * has been enabled
     */
    if (env.get("jmx.remote.x.password.file") != null ||
    env.get("jmx.remote.x.login.config") != null) {
    authenticator = new JMXPluggableAuthenticator(env);
    }
}
我认为要实现远程,JAAS认证的JMX必须手工编写JMX RMI连接器设置代码,这样的假设正确吗

Camel不应该提供一个让JAAS工作的环境吗?似乎连JAAS配置文件都没碰

更新:已解决

在VM上设置以下系统属性可以实现此目的:

-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=9410
-Dcom.sun.management.jmxremote.authenticate=true
-Djmx.remote.x.login.config=StagingJmxAuthConfig
-Dorg.apache.camel.jmx.usePlatformMBeanServer=true
-Djava.security.auth.login.config=./src/main/resources/conf/ldap-auth.config
-Dcom.sun.management.jmxremote.ssl=false 
-Dorg.apache.camel.jmx.createRmiConnector=false 
-Dcom.sun.management.jmxremote.login.config=StagingJmxAuthConfig
对于我们来说,使用安全LDAP,以下是登录配置:

StagingJmxAuthConfig {
   com.sun.security.auth.module.LdapLoginModule REQUIRED
   java.naming.security.authentication="simple"
   java.naming.security.principal="cn=Directory Manager"
   java.naming.security.credentials="PASSWORD"
   userProvider="ldap://LDAPHOST:389/BASEDN"
   userFilter="(&(uid={USERNAME})(appRole=SOME_VALUE))"
   authzIdentity=monitorRole
   debug=true
   useSSL=false;
   };
现在我可以使用jmxterm进行连接:

java -jar jmxterm-1.0-alpha-4-uber.jar -l service:jmx:rmi:///jndi/rmi://THEHOST:9410/jmxrmi -u LDAPUSER -p LDAPPASS
请注意,JNDI RMI名称缺少“/camel”后缀——这似乎是唯一的区别

万岁

本质上:

  • 使用Java6认证
  • 设置org.apache.camel.jmx.createRmiConnector=false
  • 设置org.apache.camel.jmx.usePlatformMBeanServer=true

上面的示例还显示了如何连接到受搜索保护的LDAP,该LDAP实际上是隔离的,因为所讨论的应用程序使用不同的LDAP进行JMS的JNDI查找。

本质上:-使用Java6认证的JMX远程处理-Set org.apache.camel.JMX.createRmiConnector=false-Set org.apache.camel.JMX.usePlatformMBeanServer=true