上次我向我们的项目添加了一个身份验证提供程序,以便通过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其中卢克泰勒建议使用现有的集成测试作为指导。我已经研究了它,但它不包含任何针对此类提供程序的测试。
我是这样的新手,很高兴知道以下事情:
new ApacheDSContainer("dc=springframework,dc=org", "classpath:test-server.ldif");
这种方法是否正确(我不确定它是否适合我,因为我没有创建ldap ebbedded ldap服务器在我的应用程序上下文中,并没有在提到的配置中指定任何.ldif文件)。答案 0 :(得分:1)
实际上,您只需提供另一个配置,以便进行测试。在那里,您可以定义一个不同的身份验证提供程序,例如,只需对每个人进行身份验证....或者只是简单地停用身份验证。
因为你不想测试spring提供的功能。