使用ActiveDirectoryLdapAuthenticationProvider进行集成测试

时间:2015-02-05 15:25:41

标签: java spring active-directory ldap integration-testing

上次我向我们的项目添加了一个身份验证提供程序,以便通过Windows Active Directory服务器对用户进行身份验证:

<security:authentication-manager id="authenticationManager" erase-credentials="true">
        <security:authentication-provider ref="ldapActiveDirectoryAuthProvider" />
        <security:authentication-provider ref="authenticationProvider1"/>
        <security:authentication-provider ref="authenticationProvider2"/>
    </security:authentication-manager>

     <bean id="customLdapUserDetailsMapper" class="security.authentication.customLdapUserDetailsMapper">
     </bean>

     <bean id="ldapActiveDirectoryAuthProvider" class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider">
       <constructor-arg value="my.domain"/>
       <constructor-arg value="ldap://my.custom.host:389" />
       <property name="useAuthenticationRequestCredentials" value="true" />
       <property name="convertSubErrorCodesToExceptions" value="true" />
       <property name="userDetailsContextMapper" ref="customLdapUserDetailsMapper" />
     </bean>

除了与身份验证流程一起使用的现有集成测试外,几乎可以正常工作。即,当 ActiveDirectoryLdapAuthenticationProvider.bindAsUser 失败时,每个测试都尝试连接到服务器,因为 my.custom.host 不适用于此类测试。

我已经开始谷歌搜索,以找到这种类型的测试的模拟,但不幸的是我发现只有这篇文章Integration tests with spring-security and ldap其中卢克泰勒建议使用现有的集成测试作为指导。我已经研究了它,但它不包含任何针对此类提供程序的测试。

我是这样的新手,很高兴知道以下事情:

  1. 以任何方式重用LDAP集成测试中提到的new ApacheDSContainer("dc=springframework,dc=org", "classpath:test-server.ldif");这种方法是否正确(我不确定它是否适合我,因为我没有创建ldap ebbedded ldap服务器在我的应用程序上下文中,并没有在提到的配置中指定任何.ldif文件)。
  2. 以何种方式可以正确嘲笑以下提供商?

1 个答案:

答案 0 :(得分:1)

实际上,您只需提供另一个配置,以便进行测试。在那里,您可以定义一个不同的身份验证提供程序,例如,只需对每个人进行身份验证....或者只是简单地停用身份验证。

因为你不想测试spring提供的功能。