0

次の問題があります:私のsymfony 2アプリケーションには、クライアントIPがブラックリストに登録されているかどうかをチェックする「ClientIpVoter」というボーターがあります( http://symfony.com/doc/2.0/cookbook/security/voters.html )。IP がブラックリストに登録されている場合、セキュリティ コンポーネントは AccessDeniedException をスローします。

ユーザーが適切なロールを持っていない場合など、セキュリティ コンポーネントの他の部分も AccessDeniedException をスローします。

今私の問題は、別のことをするために AccessDeniedException がスローされた理由を知りたいということです。たとえば、メッセージを表示したり、(役割が不十分なために AccessDeniedException がスローされた場合)、ユーザーをページにリダイレクトして、たとえばアカウントや電子メールを確認できるようにします。

ただし、AccessDeniedException には、認証の問題の原因に関する情報は含まれていません。これをどのように実装しますか?

4

1 に答える 1

0

ブラックリストに登録された IP に対してスローされた AccessDeniedException をキャッチし、AccessDeniedBecauseOfInsufficientRolesException などの追加情報を追加する独自のカスタム例外にラップして、その例外を再度スローすることができます。擬似コード:

try
{
  BlacklistedVoterStuff();
}
catch( AccessDeniedException e )
{
  throw AccessDeniedBecauseOfInsufficientRolesException( e.message );
}
于 2013-03-19T11:51:15.927 に答える