ActiveMQ LDAPLoginModule не любит LDAP searchResRef, сгенерированный моим сервером AD при поиске в корне дерева LDAP.Он генерирует (проглоченный):
NamingException javax.naming.PartialResultException: необработанные ссылки (и) продолжения;
Мне нужно установить для свойства 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);