0

Spring Security 3.1.x を使用しており、次のシナリオを達成しようとしています。

  • ページは isFullyAuthenticated() で保護されています
  • 現在のユーザーは、Remember Me でのみ認証されるため、完全には認証されません
  • ユーザーはこの完全に認証されたページに移動します - これは許可されるべきではありません (そして許可されていません)
  • ただし、ユーザーは 403 ページを取得するべきではありません。代わりに、ユーザーはログイン フォームを介してログインするように求められる必要があります。
  • ログイン後、ユーザーは完全に認証されたユーザーであるため、以前に要求したページに進むことが許可される必要があります。

私のSpring Security構成は次のとおりです。

<http use-expressions="true">
    <intercept-url pattern="/admin/full_auth_only.html" access="isFullyAuthenticated()" />

    <form-login login-page="/login.html" default-target-url="/authenticated.html" />
    <logout />
    <remember-me key="someAppKey" />

</http>

そして、私は追加しようとしました:

        <access-denied-handler error-page="/login.html" />

ただし、問題は、ページにアクセスすると、実際にログインフォームからプロンプトが表示され、URL だけがログインに対応していないことです。代わりに、完全に認証されたページの URL です。

http://localhost:8080/spring-security/admin/full_auth_only.html

これにより、(無効な) URL にアクセスしようとすると失敗する認証プロセスが中断 http://localhost:8080/spring-security/admin/j_spring_security_check
されます。
http://localhost:8080/spring-security/j_spring_security_check

これに関するヘルプは大歓迎です - ユースケースは非常に一般的だと思うので、カスタムの方向に進むのではなく、名前空間のサポートを使用することをお勧めします。

ありがとう。
オイゲン。

4

3 に答える 3

0

3.1.3.RELEASESpring Security のバージョンで問題を再現できませんでした。どのバージョンを使用していますか?

認証要求は、要求の URL が事前設定された値 (デフォルトは) で終わってAbstractAuthenticationProcessingFilterいるかどうかをチェックする によってインターセプトされます。その末尾を持つ URL は、認証の試行をトリガーします。関連するコードはこちらで確認できます。/j_spring_security_check

これは、無効であると言った URL が実際には問題なく処理されるはずであることを意味します。

上記のコードは非常に初期のバージョン ( 2.x) から変更されていないため、他にも問題があるはずです。

構成といくつかのデバッグ レベルのログを共有できれば、実際の問題を明らかにするのに役立ちます。

于 2013-03-24T14:17:13.320 に答える
0

welcome-file-list1.入っている場合は取り除きますweb.xml

2. がタグ内に設定されていないalways-use-default-targetことを確認するか、まとめて削除します。 falseform-login

3.ログインページへのアクセスを全員に許可していることを確認してください。このようなもの<intercept-url pattern="/login.htm" access="permitAll()"/>

それはうまくいくはずです。

于 2013-04-05T05:27:07.273 に答える