ActiveMQ的LDAPLoginModule不喜欢我的AD服务器在搜索LDAP树的根时生成的LDAP searchResRef。它生成(吞下):
NamingException javax.naming.PartialResultException:Unprocessed Continuation Reference(s);
我需要将java.naming.referral
属性设置为follow
。我可以通过添加:
env.put(Context.REFERRAL,“follow”);
但是,有没有办法使用神秘的(我的C#大脑)jndi.properties文件来避免重新编译?
用于启动进程的命令行:
/usr/bin/java -Xms256M -Xmx256M
-Dorg.apache.activemq.UseDedicatedTaskRunner=true
-Djava.util.logging.config.file=logging.properties
-Djava.security.auth.login.config=/root/apache-activemq-5.5.0/conf/login.config
-Dcom.sun.management.jmxremote
-Dactivemq.classpath=/root/apache-activemq-5.5.0/conf;
-Dactivemq.home=/root/apache-activemq-5.5.0
-Dactivemq.base=/root/apache-activemq-5.5.0
-jar /root/apache-activemq-5.5.0/bin/run.jar start
我想要影响的现有代码(isLoginPropertySet和getLDAPPropertyValue只是从ActiveMQ配置文件读取 - 上面命令行中的login.config):
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, getLDAPPropertyValue(INITIAL_CONTEXT_FACTORY));
if (isLoginPropertySet(CONNECTION_USERNAME)) {
env.put(Context.SECURITY_PRINCIPAL, getLDAPPropertyValue(CONNECTION_USERNAME));
}
if (isLoginPropertySet(CONNECTION_PASSWORD)) {
env.put(Context.SECURITY_CREDENTIALS, getLDAPPropertyValue(CONNECTION_PASSWORD));
}
env.put(Context.SECURITY_PROTOCOL, getLDAPPropertyValue(CONNECTION_PROTOCOL));
env.put(Context.PROVIDER_URL, getLDAPPropertyValue(CONNECTION_URL));
env.put(Context.SECURITY_AUTHENTICATION, getLDAPPropertyValue(AUTHENTICATION));
context = new InitialDirContext(env);
答案 0 :(得分:3)
是的,只需将java.naming.referral=follow
放入名为jndi.properties
的文本文件中,然后在JAR文件的根目录中找到它。
要添加到jar文件:
jar -uf run.jar jndi.properties