如何在Spring配置文件中配置ApacheDS工作目录?

时间:2013-09-19 16:35:22

标签: java spring maven jenkins apacheds

我已经使用spring security和嵌入式ApacheDS服务器为LDAP身份验证编写了一些单元测试。通过在spring应用程序上下文中配置元素,自动启动服务器。我为测试指定了一个LDIF文件。一切都很棒。测试在我们的Jenkins实例上运行了一周,直到有一天测试无法正常关闭并删除了apacheds-spring-security目录。随后 由于此目录的存在,测试运行将崩溃。

此问题先前已在

中介绍

ApacheDS Embedded with Spring

,答案是提供一个指定工作目录位置的命令行参数。如果我可以这样做,我可以指定我的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>

非常感谢任何帮助。

1 个答案:

答案 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的工作目录在运行测试时设置为项目的根目录。