0 Replies Latest reply on Jun 19, 2012 2:12 AM by xrsu

    How to create Ldap Jndi for Spring Security

    xrsu

      We are using JBoss 5.1 and using Spring Security and Ldap for the authentication.

      Right now we set the ldap contextsource in xml as below and it works fine.
      <security:ldap-server id="ldapServerAuthentication" url="ldap://10.20.20.152:8389/dc=com"/>

       

      What we want to do is to create it as a JNDI in JBoss 5.1.
      Then we can use jndi lookup like <jee:jndi-lookup id="ldapServerAuthentication" jndi-name="ldap/ldapAuthentication"/>

       

      So I create deploy/ldap-service.xml as below, which I searched out from internet.

      <?xml version="1.0" encoding="UTF-8"?>
      <server>
         <mbean code="org.jboss.naming.ExternalContext" name="jboss.jndi:service=ExternalContext,jndiName=ldap/ldapAuthentication">
            <attribute name="JndiName">ldap/ldapAuthentication</attribute>
            <attribute name="Properties">
               java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
               java.naming.provider.url=ldap://10.20.20.152:8389/dc=com
               java.naming.security.credentials=modifier
               java.naming.security.principal=uid=modifier,ou=system,dc=com
            </attribute>
            <attribute name="InitialContext">javax.naming.ldap.InitialLdapContext</attribute>
            <attribute name="RemoteAccess">false</attribute>
         </mbean>
      </server>

      Anyway I got the error,
      nested exception is java.lang.IllegalStateException: Cannot convert value of type [$Proxy142 implementing javax.naming.directory.DirContext,javax.naming.ldap.LdapContext,javax.naming.Context] to required type [org.springframework.ldap.core.support.BaseLdapPathContextSource]: no matching editors or conversion strategy found

       

      Think that I should use some Spring ldap classes to create the jndi or have to write the classes, but I can't find any document talking about that.
      Please anyone can help me out? Thank you very much.

       

       

      Actually the way I did for the jndi is correct, it returns the javax.naming.directory.DirContext.

      However the spring security <ldap-server> expects the org.springframework.ldap.core.support.BaseLdapPathContextSource (interface of DefaultSpringSecurityContextSource).

      That's why the erorr msg complains type is not matched.

       

      So I want to ask further question in another way.

      Is there any way to convert javax.naming.directory.DirContext instance to org.springframework.ldap.core.support.BaseLdapPathContextSource instance?

      It looks I need the connections between jdk ldap implementation with spring ldap implementation.

      That will solve my problem as well.