Spring Security和LDAP身份验证错误

时间:2014-01-05 07:49:02

标签: spring-security ldap

我正在尝试设置LDAP身份验证,这是我的spring-security.xml文件:

<security:ldap-server id="ldapServer"  url="${ldpaUrl}" manager-dn="morrislgn@example.com" manager-password="manager" />
    <bean id="contextSource" class="com.test.security.ldap.DefaultSpringSecurityContextSource">
        <constructor-arg value="ldapServer" />
        <!-- <property name="userDn" value="cn=manager,dc=springframework,dc=org"/>
         <property name="password" value="password" /> -->
    </bean>
    <bean id="bindAuthenticator" class="com.test.security.ldap.BindAuthenticator">
        <constructor-arg ref="contextSource" />
        <property name="userDnPatterns">
            <list>
                <value>uid={0},ou=people</value>
            </list>
        </property>
    </bean>
    <bean id="userDetailsContextMapper" class="com.test.security.ldap.UserDetailsContextMapper"/>
    <bean id="defaultLdapAuthoritiesPopulator" class="com.test.security.ldap.DefaultLdapAuthoritiesPopulator">
        <constructor-arg ref="contextSource" />
        <constructor-arg value="ou=groups" />
        <!-- <property name="groupRoleAttribute" value="ou" /> -->
    </bean>
    <bean id="ldapAuthProvider" class="com.test.security.ldap.LdapAuthenticationProvider">
        <constructor-arg ref="bindAuthenticator"/>
        <constructor-arg ref="defaultLdapAuthoritiesPopulator"/>
    </bean>
    <bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
      <constructor-arg index="0" value=""/>
      <constructor-arg index="1" value="(uid={0})"/>
      <constructor-arg index="2" ref="contextSource" />
    </bean>  
    <bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
        <constructor-arg ref="contextSource"/>
        <property name="ignorePartialResultException" value="true"/>
    </bean>
    <bean id="authenticationSource" class="org.springframework.ldap.authentication.DefaultValuesAuthenticationSourceDecorator">
        <property name="target" ref="springSecurityAuthenticationSource"/>
        <property name="defaultUser" value="CN=Manager"/>
        <property name="defaultPassword" value="secret"/>
     </bean>
     <bean id="springSecurityAuthenticationSource" class="org.springframework.security.ldap.authentication.SpringSecurityAuthenticationSource"/>
      <security:authentication-manager alias="authenticationManagerLdpa">
          <security:ldap-authentication-provider server-ref="ldapServer" user-context-mapper-ref="userDetailsContextMapper"/>
        </security:authentication-manager> 

根据spring安全文档,这应该可行,但它不会抛出此异常:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.web.DefaultSecurityFilterChain#0': Unsatisfied dependency expressed through constructor argument with index 1 of type [javax.servlet.Filter[]]: Could not convert constructor argument value of type [java.util.ArrayList] to required type [[Ljavax.servlet.Filter;]: Failed to convert value of type 'java.util.ArrayList' to required type 'javax.servlet.Filter[]'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.test.security.ldap.DefaultSpringSecurityContextSource] to required type [javax.servlet.Filter]: no matching editors or conversion strategy found
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:702)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1045)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:949)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:353)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:154)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1387)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1128)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:608)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

0 个答案:

没有答案