6

現在、次のようなセットアップがあります。

春のセキュリティ.xml:

<http auto-config="true">
    <intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page="/login"
                default-target-url="/main.html"
                authentication-failure-url="/failedLogin"/>
    <logout logout-url="/logout.html" logout-success-url="/login" />
</http>

<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="foo" password="bar" authorities="ROLE_USER" />                
        </user-service>
    </authentication-provider>
</authentication-manager>

web.xml:

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

これはすべて期待どおりに機能しているように見えますが、特別な状況では、ユーザーが特別なトークンを渡した場合にログイン ページをバイパスする必要があります。したがって、現在、ユーザーが などの URL にアクセスする/dogと、ログイン ページが表示され、 の資格情報を渡すと、foo/barログインして に対応するページが表示されます/dog

などの URL を使用して/dog?token=abcd、ログイン画面をバイパスし、に対応するページに直接アクセスできるようにしたい/dog。無効なトークンを提供すると、アクセス拒否ページが表示されます。

4

1 に答える 1

9

Spring Security では、対象とするシナリオは、リファレンス マニュアルのPre-Authentication Scenarios の章で説明されています。

基本的に、次のことを行う必要があります。

  • AbstractPreAuthenticatedProcessingFilter実装の 1 つを拡張または選択して、カスタム フィルターを作成します。
  • カスタムフィルターの登録<custom-filter position="PRE_AUTH_FILTER" ref="yourPreAuthFilter" />
  • 実装するか、実装されたAuthenticationUserDetailsServiceのいずれかを選択します。
  • PreAuthenticatedAuthenticationProvider( で)にサービスを登録します<property name="yourPreAuthenticatedUserDetailsService">

編集この回答では、OPはカスタムを実装する方法を示していますPRE_AUTH_FILTER

于 2012-08-19T12:42:13.620 に答える