0

私はldap + spring securityを学ぼうとしています。Apache DS を使用して Local Dev をセットアップしました。

コンパイルしてエラーなしで実行できるようになりましたが、ログインしようとしても何も実行されず、エラーメッセージも表示されません。DS がリクエストを受け取っているかどうかさえわかりません。

誰かがこれをデバッグするためのアドバイスを持っているか、問題を見ることができれば、それは素晴らしいことです.

JSP:

<form action="/j_spring_security_check.action" method="POST">
    <span><label for="username">User Name:</label>
    <input id="username" name="j_username" type="text"/></span>
    <span><label for="password">Password:</label>
    <input id="password" name="j_password" type="password"/></span>
    <span><input type="submit" value="Log In"/></span>
</form>

アプリケーションのコンテキスト:

<bean id="contextSource"
          class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
        <constructor-arg value="ldap://localhost:389/dc=example,dc=com"/>
        <property name="userDn" value="cn=system,dc=example,dc=com"/>
        <property name="password" value="password"/>
    </bean>

    <bean id="ldapAuthProvider"
          class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
        <constructor-arg>
            <bean class="org.springframework.security.ldap.authentication.BindAuthenticator">
                <constructor-arg ref="contextSource"/>
                <property name="userDnPatterns"><list><value>uid={0},ou=system</value></list></property>
            </bean>
        </constructor-arg>
        <constructor-arg>
            <bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
                <constructor-arg ref="contextSource"/>
                <constructor-arg value="ou=system"/>
                <property name="groupRoleAttribute" value="ou"/>
                <property name="defaultRole" value="ROLE_ADMIN"/>
            </bean>
        </constructor-arg>

    </bean>

春のセキュリティ:

<http auto-config="true" use-expressions="true">
        <intercept-url pattern="/noSecurityJSP/**" access="permitAll()"/>
        <intercept-url pattern="/login*" access="permitAll()"/>
        <intercept-url pattern="/resources/**" access="permitAll()"/>
        <intercept-url pattern="/**" access="isAuthenticated()"/>

        <form-login
                login-page="/login.htm"
                login-processing-url="/j_spring_security_check.action"
                authentication-failure-url="/splash_page.htm?error=true"
                default-target-url="/welcomePage.htm"
                always-use-default-target="true"/>
    </http>



    <authentication-manager>
        <authentication-provider ref='ldapAuthProvider'/>
    </authentication-manager>

Spring Maven の依存関係:

<dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-ldap</artifactId>
            <version>3.0.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.ldap</groupId>
            <artifactId>spring-ldap-core</artifactId>
            <version>1.3.2.RELEASE</version>

LDAP の写真 ここに画像の説明を入力

4

1 に答える 1

3

あなたの質問は「これをデバッグするにはどうすればよいですか」のようです。理想的には、「何もしない」という意味についてさらに情報を提供する必要がありますが、デバッグの場合、Spring Security の標準デバッグ出力は何が起こっているかを示し、ApacheDS はリクエストを受信したかどうかも示す必要があります。どちらも標準の Java ロギング メカニズムを使用します。例として、Spring Security LDAP サンプルの logback 構成ファイルを使用できます(必要に応じて DEBUG レベルに変更できます)。実際、そのサンプルをディレクトリ構造で動作するように変更することは、おそらく良い考えです。最初に、そのまま実行できることを確認してください。

アプリをデプロイする前に、このようなテスト クラスを作成することを常にお勧めします。例についてはFAQを参照してください。IDE でデバッグできます。

間違っているように見えることの 1 つは、他の依存関係とは異なるバージョンの spring-security-ldap を使用していることです。すべての Spring Security 依存関係に同じ maven プロパティを使用する必要があります。また、クラスパス (lib ディレクトリ) をチェックして、異なるバージョンの重複した jar が含まれていないことを確認してください。

ディレクトリに何が送信されているかを本当に知りたい場合は、 などのユーティリティを使用してネットワーク トラフィックを直接監視できますtcpdump。何かのようなもの:

sudo tcpdump -A -i lo0 tcp port 389

ポート 389 への TCP トラフィックをコンソールに記録します。

ビルド構成で間違っているように見えることの 1 つは、spring-security-ldap依存関係のバージョンが他の spring-security jar のバージョンとは異なることです。これらはすべて同じである必要があります。Maven プロパティを使用してこのようなエラーを防ぎ、クラスパス (lib ディレクトリ) をチェックして、jar の重複やバージョンの不一致がないことを確認してください。

于 2014-01-29T18:53:41.937 に答える