我已经使用spring security和嵌入式ApacheDS服务器为LDAP身份验证编写了一些单元测试。通过在spring应用程序上下文中配置元素,自动启动服务器。我为测试指定了一个LDIF文件。一切都很棒。测试在我们的Jenkins实例上运行了一周,直到有一天测试无法正常关闭并删除了apacheds-spring-security目录。随后 由于此目录的存在,测试运行将崩溃。
此问题先前已在
中介绍,答案是提供一个指定工作目录位置的命令行参数。如果我可以这样做,我可以指定我的maven构建的目标目录,并且maven会在构建和测试之前进行干净时为我解决问题。
一切都好。问题是,如何指定这个工作目录? -DapacheDSWorkDir =“foo”在运行maven构建时被忽略,并且尝试以编程方式设置此值也不起作用。有人有任何想法吗?如您所见,配置中不包含任何底层LDAP提供程序。
<ldap-server id="ldapServer"
url="ldap://localhost:33389/dc=aws,dc=com"
manager-dn="uid=admin,ou=system"
manager-password="secret"/>
<ldap-server ldif="classpath:/ldap/test-server.ldif"
root="dc=aws,dc=com"/>
<bean:bean id="federatedLdapUserContextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
<bean:constructor-arg value="ldap://localhost:33389/dc=aws,dc=com"/>
</bean:bean>
非常感谢任何帮助。
答案 0 :(得分:0)
试试这个(介意半伪代码):
package spring;
import org.springframework.security.ldap.server.ApacheDSContainer;
public final class EmbeddedApacheDsConfigurer implements BeanPostProcessor {
private String workingDirectory;
public void setWorkingDirectory(String workingDirectory) {
this.workingDirectory = workingDirectory;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof ApacheDSContainer) {
((ApacheDSContainer)bean).setWorkingDirectory(new File(workingDirectory));
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
然后在你的测试bean配置中:
<bean class="spring.EmbeddedApacheDsConfigurer" p:workingDirectory="target/apacheds" />
这假设Maven的工作目录在运行测试时设置为项目的根目录。