0

私はこのような構成を持っています:

<security:http auto-config="true" use-expressions="true">
    <security:intercept-url pattern="/index.jsp" access="isAuthenticated()"/>
    <security:http-basic/>
</security:http>

次に、BasicAuthenticationFilter

<bean id="basicAuthenticationFilter"
      class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
    <property name="authenticationEntryPoint" ref="BauthenticationEntryPoint"/>
    <property name="authenticationManager" ref="BauthenticationManager"/>
</bean>

エントリ ポイントとマネージャは、次のように説明されています。

<bean id="BauthenticationEntryPoint"   class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
    <property name="realmName" value="Name Of Your Realm"/>
</bean>
<bean id="BauthenticationManager" class="org.springframework.security.authentication.ProviderManager">
    <property name="providers">
        <list>
            <ref local="ldapAuthProvider"/>
        </list>
    </property>
</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>sAMAccountName={0}</value>
                </list>
            </property>
        </bean>
    </constructor-arg>
    <constructor-arg>
        <bean
                class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
            <constructor-arg ref="contextSource"/>
            <constructor-arg value=""/>
        </bean>
    </constructor-arg>
</bean>

/index.jsp にアクセスしようとすると、ユーザー名とパスワードを要求する stadart http auth ウィンドウが表示されました。フォームに入力してEnterキーを押すと、何も起こりません-認証ウィンドウがリロードされるだけで、それ以上は何もありません。

どこで間違えた?ありがとう。

4

1 に答える 1

0

Bean を個別に宣言しても、それらが名前空間構成で同等の Bean をオーバーライドすることを自動的に意味するわけではありません。たとえば、フィルタ チェーン (およびエントリ ポイント) に<http-basic />を追加するBasicAuthenticationFilterと、独自のインスタンスを宣言したという事実は無効になります。

現状では、名前空間の構成は、宣言したフィルターと認証 Bean を無視しています。あなたは使用してみることができます:

<http use-expressions="true" authentication-manager-ref="BauthenticationManager">
    <intercept-url pattern="/index.jsp" access="isAuthenticated()"/>
    <http-basic />
</http>

これにより、構成で認証マネージャーが使用されます。または、認証マネージャーに標準の名前空間構文を使用して、BauthenticationManagerBeanを削除することもできます。

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

いずれにせよ、おそらくリファレンス マニュアルの名前空間の章を読んで、その仕組みの概要を理解する必要があります。

于 2013-01-29T18:14:52.317 に答える