2010-10-18 151 views
0

我有LDAP春季安全問題,我試圖授權對LDAP服務器。我有彈簧配置XML文件(安全-config.xml中)是這樣的:春季安全LDAP - 登錄問題(ProviderNotFoundException)

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd"> 

<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> 
    <constructor-arg value="ldap://111.111.111.111"/> 
    <property name="userDn" value="cn=auth-user,ou=System,dc=foo,dc=com"/> 
    <property name="password" value="fooPwd"/> 
</bean> 

<bean id="ldapAuthProvider" class="org.springframework.security.providers.ldap.LdapAuthenticationProvider"> 
    <constructor-arg> 
    <bean class="org.springframework.security.providers.ldap.authenticator.BindAuthenticator"> 
    <constructor-arg ref="contextSource"/> 
    <property name="userSearch"> 
    <bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"> 
     <constructor-arg index="0" value="ou=people"/> 
     <constructor-arg index="1" value="(uid={0})"/> 
     <constructor-arg index="2" ref="contextSource" /> 
    </bean> 
    </property> 
    </bean> 
    </constructor-arg> 
    <constructor-arg> 
    <bean class="com.company.name.services.UserAuthoritiesPopulator" /> 
    </constructor-arg> 
</bean> 
</beans> 

在登錄控制器(LoginController.java)我授權是這樣的:

@RequestMapping(value = "/login", method = RequestMethod.POST) 
public String loginPPost(String username, String password, Model model, HttpServletRequest req, HttpServletResponse res) throws SQLException { 

UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password); 
Authentication authentication = authenticationManager.authenticate(authRequest); 
SecurityContextHolder.getContext().setAuthentication(authentication); 
... 
} 

的方法「 authenticationManager.authenticate(authRequest)」引發此異常:

org.springframework.security.providers.ProviderNotFoundException: No AuthenticationProvider found for org.springframework.security.providers.UsernamePasswordAuthenticationToken 
    at org.springframework.security.providers.ProviderManager.doAuthentication(ProviderManager.java:214) 
    at org.springframework.security.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:46) 

是否有人知道如何解決這個問題?我應該使用不同的方法進行授權嗎?或者我的配置不好?

感謝您的幫助,

回答

1

您必須添加標籤「秒:定製認證供應商」身份驗證提供豆:

<bean id="ldapAuthProvider" class="org.springframework.security.providers.ldap.LdapAuthenticationProvider"> 
    <sec:custom-authentication-provider/> 
    ... 
</bean> 

你可以找到一個例子在我的博客上使用Crowd而不是LDAP: http://aloiscochard.blogspot.com/2009/12/integrating-spring-security-with-ntlm_19.html

+0

非常感謝!它有幫助。我只是想知道我無法在Spring Secuirty doc的任何地方找到它: - / – mateo 2010-10-18 21:16:02