【问题标题】:How to configure ApacheDS Working Directory in Spring config file?如何在 Spring 配置文件中配置 ApacheDS 工作目录?
【发布时间】:2013-09-19 16:35:22
【问题描述】:

我使用 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>

任何帮助将不胜感激。

【问题讨论】:

    标签: java spring maven jenkins apacheds


    【解决方案1】:

    试试这个(注意半伪代码):

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

    【讨论】:

    • 谢谢!这成功了,而且它是一种对未来非常有用的技术。
    猜你喜欢
    • 2014-11-30
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2020-02-24
    • 2014-10-15
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多