0

Spring Security と組み込みの ApacheDS サーバーを使用して、LDAP 認証の単体テストをいくつか作成しました。サーバーは、Spring アプリケーション コンテキスト内の要素の構成を介して自動的に起動されます。テスト用に LDIF ファイルを指定します。すべてが素晴らしいです。テストは、テストが適切にシャットダウンできず、apacheds-spring-security ディレクトリを削除できなかったある日まで、Jenkins インスタンスで 1 週間実行されました。このディレクトリが存在するため、後続のテスト実行はクラッシュします。

この問題は、以前に

Spring を組み込んだ ApacheDS

その答えは、作業ディレクトリの場所を指定するコマンド ライン引数を提供することでした。これができれば、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>

どんな助けでも大歓迎です。

4

1 に答える 1

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 の作業ディレクトリがプロジェクトのルートに設定されることを前提としています。

于 2013-09-19T20:48:31.270 に答える