3

URI を作成するときは、特定の規則に従います。/login、などのすべての認証関連の URIは/logout/changepasswordサブコンテキスト に分類されます/auth

したがって、認証関連の URI は次のようになります。

/auth/login
/auth/logout
/auth/changepassword

これは、Spring セキュリティ コンテキスト XML にあるものです。

<http pattern="/auth/**" security="none" />
<http pattern="/resources/**" security="none" />

<http auto-config="true" access-decision-manager-ref="accessDecisionManager">
    <intercept-url pattern="/admin/**" access="ADMINISTRATIVE_ACCESS"/>
    <intercept-url pattern="/**" access="XYZ_ACCESS"/>

    <form-login
            login-page="/auth/login"
            default-target-url="/content"
            authentication-failure-url="/auth/loginFailed"
            authentication-success-handler-ref="authenticationSuccessHandler"/>

    <logout logout-url="/auth/logout" logout-success-url="/auth/login"/>
</http>

今の問題は/auth/logout、アクセスすると 404 が表示されることです。ただし、や/authなど以外のもので始まるように変更すると、正常に動作します。/abcd/logout/logout

これは、セキュリティで保護されていないと定義/auth/**しているにもかかわらず、ログアウト ページとして使用しようとしていることが原因であると考えています。(ログインしていない場合、どうすればログアウトできますか?)

かなり厳格な URI 命名規則を満足させるために、これを回避する方法はありますか?

4

2 に答える 2

4

あなたはその部分について正しいです:

これは、セキュリティで保護されていないと定義/auth/**しているにもかかわらず、ログアウト ページとして使用しようとしていることが原因であると考えています。(ログインしていない場合、どうすればログアウトできますか?)

より正確な定義

<http pattern="/auth/**" security="none" />

/auth/**パターンに一致するリクエストに Spring Security フィルターが適用されないことを意味するため、Spring Security は/auth/logoutURL を制御する必要がありますが、制御しません。

Spring Security はパターンを上から下まで照合するため/auth/logout、メインの単純なオーバーライドは機能し<http>ないため、その問題の解決策は個別のパターンを定義することです。

<http pattern="/auth/login" security="none" />
<http pattern="/auth/changepassword" security="none" />
<http pattern="/resources/**" security="none" />

<http auto-config="true" use-expressions="true" access-decision-manager-ref="accessDecisionManager">
    <intercept-url pattern="/auth/logout" access="permitAll"/>
    <intercept-url pattern="/admin/**" access="ADMINISTRATIVE_ACCESS"/>
    <intercept-url pattern="/**" access="XYZ_ACCESS"/>
    <!-- rest of your config -->
</http>

/auth/*扱う URLが多い場合は<http>'sを使うこともできrequest-matcher="regex"ますが、その方法では読み込めないと思います。

于 2012-09-25T14:57:14.447 に答える
2

の代わりにsecurity="none"、あなたが望むと思いますaccess="permitAll"ドキュメントの permitAll の説明)。

何をすべきかはわかりませんが、Spring Security チェーンが完全にバイパスされるsecurity="none"と混同している可能性があると思います。filters="none"

于 2012-09-25T14:52:06.247 に答える