2014-12-16 3 views
2

Я использую WildFly 8,2 и настройки следующих внешнего контекстаWildFly Внешний контекст - LDAP

<subsystem xmlns="urn:jboss:domain:naming:2.0"> 
    <bindings> 
     <external-context name="java:global/ldap" module="org.jboss.as.naming" class="javax.naming.ldap.InitialLdapContext" cache="true"> 
      <environment> 
      <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/> 
      <property name="java.naming.provider.url" value="ldap://example.com:389"/> 
      <property name="java.naming.security.authentication" value="simple"/> 
      <property name="java.naming.security.principal" value="CN=exampleuser,DC=example,DC=com"/> 
      <property name="java.naming.security.credentials" value="examplepassword"/> 
      </environment> 
     </external-context> 
    </bindings> 
    <remote-naming/> 
</subsystem> 

Я пытаюсь использовать этот внешний контекст для подключения к Active Directory с этим кодом:

@Resource(lookup = "java:global/ldap") 
private LdapContext ldapCtx; 

NamingEnumeration<SearchResult> enumeration = ldapCtx.search(); 

Я получаю следующие ошибки:

Caused by: java.lang.IllegalArgumentException: JBAS016081: Error injecting resource into CDI managed bean. Can't find a resource named java:global/ldap defined on private javax.naming.ldap.LdapContext com.example.LdapClient.ldapCtx 

Если я изменить код

@Resource(lookup = "java:global/ldap") 
private InitialDirContext iniCtx; 
LdapContext ldapCtx = (LdapContext) iniCtx; 
NamingEnumeration<SearchResult> enumeration = ldapCtx.search(); 

я

Caused by: javax.naming.NamingException: JBAS011878: Failed to lookup ldap [Root exception is java.lang.RuntimeException: java.lang.NoSuchMethodException: javax.naming.ldap.LdapContext.<init>(java.util.Hashtable)] 
+0

как вы, наконец, получили эту работу? Я столкнулся с одной и той же проблемой, и это очень помогло бы вам решить ваше решение. – Tommy

ответ

2

Похоже, вы установили класс для контекста к интерфейсу LdapContext в подсистеме именования. Я верю (и, пожалуйста, поправьте меня, если я ошибаюсь, поскольку прошло какое-то время, так как я проделал какую-либо работу с этим аспектом), это должен быть реальный класс реализации, то есть InitialDirContext, InitialLdapContext и т. Д. Затем вам понадобится для изменения вашей версии @Resource.

Я бы предпочел, чтобы это комментарий, но не хватает очков. :)

+0

Вы правы, и я изменил класс во внешнем контексте и не изменил результаты. –

+0

Есть ли конкретная причина, по которой вам нужен интерфейс LdapContext? Вам нужна функция управления LDAPv3 или вы просто выполняете базовые поиски? Был ли быстрый тест с использованием @Resource-инъекции, чтобы получить InitialDirContext и поиск пользователя работает без каких-либо проблем. – whitlaaa

Смежные вопросы