0

Spring Security で使用しようとしている単純な認証プロバイダーがあります。

<security:http auto-config="true" use-expressions="true">
    <security:intercept-url pattern="/**" access="isAuthenticated()" />
</security:http>
<security:authentication-manager>
    <security:authentication-provider
        ref="ipAddressAuthenticationProvider" />
</security:authentication-manager>

現在、上記の構成では、ユーザーは最初の訪問時にログオン ページにリダイレクトされます。このリダイレクトはしたくありません。ページにアクセスするたびに、この認証プロバイダーにアクセスしようとしています。追加のカスタム コードを記述せずにこれを機能させる方法はありますか?

どうにかしてフォームフィルターと基本フィルターをきれいに取り除く必要があると思います。

結果

以下の構成で動作するようになりました。両方の抽象メソッドをAbstractPreAuthenticatedProcessingFilter単純に拡張する必要がありました。return "";

<security:http use-expressions="true" entry-point-ref="http403ForbiddenEntryPoint">
    <security:intercept-url pattern="/**" access="isAuthenticated()" />
    <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter" />
</security:http>
<bean id="preAuthFilter" class="com.hercules.ratinggame.business.security.IpAddressPreAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager"/>
</bean>
<bean id="http403ForbiddenEntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/>
<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider
        ref="ipAddressAuthenticationProvider" />
</security:authentication-manager>
4

1 に答える 1

3

現在使用しているのは、フィルター付きの要素を含め、フードの下で構成されたフィルターをほとんどauto-config="true"取得しないことを意味します。<form-login>UsernamePasswordAuthenticationFilter

また、ページにアクセスするたびにこの認証プロバイダーをヒットするには、リクエストからデータを取得できるフィルターが必要です (私が見る限り IP アドレス)。フィルターは、おそらく、認証マネージャーにアクセスできる独自の実装RequestHeaderAuthenticationFilterである可能性が高くなります。AbstractPreAuthenticatedProcessingFilter

まとめると、構成は次のようになります。

<security:http use-expressions="true">
    <security:intercept-url pattern="/**" access="isAuthenticated()" />
    <security:logout /> <!-- optional -->
    <security:custom-filter position="PRE_AUTH_FILTER"
            ref="ipFromRequestPreAuthenticationFilter" />
</security:http>

<!-- this will probably extend AbstractPreAuthenticatedProcessingFilter -->
<bean id="ipFromRequestPreAuthenticationFilter"
        class="com.example.IpFromRequestPreAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager" />
</bean>

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider ref="ipAddressAuthenticationProvider" />
</security:authentication-manager>
于 2012-09-14T08:17:22.253 に答える