2011-08-10 82 views
1

下面是我的代碼:春LDAP:創建連接

private DirContext createContext() { 

    Hashtable env = new Hashtable(); 

    env.put(Context.INITIAL_CONTEXT_FACTORY, "org.springframework.ldap.core.support.LdapContextSource"); 
    env.put(Context.PROVIDER_URL, "ldap://FAKESERV.fakedom:389/"); 
    env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    env.put(Context.SECURITY_PRINCIPAL, "[email protected]"); 
    env.put(Context.SECURITY_CREDENTIALS, "1qaz!QAZ"); 

    try { 
     return new InitialDirContext(env); 
    } catch (NamingException e) { 
     throw new RuntimeException(e); 
    } 
} 

它工作正常,但我應該使用XML配置。

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> 
    <property name="url" value="ldap://FAKESERV.fakedom:389/"/> 
    <property name="base" value="ou=FAKESERV.fakedom"/> 
    <property name="userDn" value="[email protected]"/> 
    <property name="password" value="1qaz!QAZ"/> 
    <property name="contextFactory" value="com.sun.jndi.ldap.LdapCtxFactory"/> 
</bean> 

使用ldapTemplate.getContextSource().getReadOnlyContext() 我有525錯誤 - 「用戶未找到」。如何修改這個XML?

server: FAKESERV 
fomain: fakedom 
user: fakeuser 
url: ldap://FAKESERV.fakedom:389/ 

Active Directory中的所有屬性都是默認值。

另外,如何執行ldap請求搜索某些用戶?

UPD: 現在我使用了impl。對於ActiveDirectory:

<bean id="authenticationToken" class="org.springframework.security.authentication.UsernamePasswordAuthenticationToken"> 
     <constructor-arg value="[email protected]" /> 
     <constructor-arg value="1qaz!QAZ" /> 
    </bean> 
    <bean id="authenticationProvider" 
     class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider"> 
     <constructor-arg value="fakedom" /> 
     <constructor-arg value="ldap://FAKESERV.fakedom:389/" /> 
    </bean> 

它工作正常,謝謝。

現在我要發送的LDAP請求到服務器...

回答

1

春季安全現在提供連接LDAP/AD。但有一兩件事你可以嘗試是設置:

com.sun.jndi.ldap.LdapCtxFactory 

Context.INITIAL_CONTEXT_FACTORY

而且InitialLdapContext作爲上下文它連接?

Hashtable env = new Hashtable(); 

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
env.put(Context.PROVIDER_URL, "ldap://FAKESERV.fakedom:389/"); 
env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
env.put(Context.SECURITY_PRINCIPAL, "[email protected]"); 
env.put(Context.SECURITY_CREDENTIALS, "1qaz!QAZ"); 

try { 
    return new InitialLdapContext(env, null); 
} catch (NamingException e) { 
    throw new RuntimeException(e); 
} 

如果這工作,那麼它是一個配置問題。

Good reading with examples