12

メソッドレベルのセキュリティを備えた Spring Security 3.1.3-RELEASE を使用しています。それは完全に機能します。

アクセスが拒否された理由をログに記録し、ユーザーに表示したいと思います。

org.springframework.security.web.access.AccessDeniedHandlerImplサブクラスを使用して、org.springframework.security.access.AccessDeniedExceptionスローされたものへの参照を取得できますが、原因を特定する方法が見つかりません (たとえば、「ロール ROLE_ADMIN がありません」など)。

何か足りないのですか、それとも単に存在しないのですか?

4

3 に答える 3

5

残念ながら、Spring Security で利用可能なデフォルトの実装では不可能です。

ソースコードを調べたところ...

MethodSecurityInterceptorメソッド呼び出しの保護を担当します。アクセス決定を に委任しますAccessDecisionManager。すぐに使用できるすべての実装をチェックAccessDecisionManagerしました。

  • 肯定ベース
  • コンセンサスベース
  • 全会一致ベース

AccessDeniedExceptionそれぞれが同様の方法で例外をスローします。

case AccessDecisionVoter.ACCESS_DENIED:
                throw new AccessDeniedException(
                      messages.getMessage("AbstractAccessDecisionManager.accessDenied",
                      "Access is denied")
                 );

AbstractAccessDecisionManager.accessDeniedローカライズ可能なメッセージの名前です。

英語の場合は次のとおりです。

AbstractAccessDecisionManager.accessDenied=Access is denied

すぐに使用できる言語がいくつかあり、独自の翻訳を作成できますが...

以上で、例外の理由に関する情報はこれ以上ありません。

例外メッセージのローカライズに関する詳細:

http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#localization

于 2012-11-06T19:05:10.220 に答える