2012-04-26 24 views
0

私のリソースに@RequiresGuestアノテーションを持つメソッドがあります。ログインしたユーザーがリンクをクリックすると、このメッセージのあるUnauthenticatedExceptionが返されますShiroのUnauthenticatedExceptionを処理する方法

ゲストのみの操作を実行しようとしています。現在の件名はゲストではなく です(以前のログイン から認証されているか記憶されています)。アクセスが拒否されました。

しかし、どうすれば処理できますか?たとえば、リクエストをログアウトページにリダイレクトするにはどうすればよいですか?

答えて

1

これはあなたの選択したMVCフレームワークの際に通常依存している:

  • いくつかのUIメカニズム(例えばJSP)は、あなたが任意の例外を処理するために使用することができます「というエラー・ページ」を持つことができます。
  • さらに洗練されたUIフレームワークには、必要な処理(例外の検査、HTTPステータスコードの設定、特定の問題に固有のエラーページへのリダイレクト)を可能にする「すべての」例外ハンドラやコントローラがあります。 、など)。

あなたは、このためにMVCのメカニズムを使用したくない場合は、これを行うだろうサーブレットフィルタを作成することが可能です:

フィルタは、try/catchブロックでれるFilterChainを実行しますAuthorizationExceptionをキャッチします。それがキャッチされた場合、 'unauthorizedUrl'に302リダイレクトを発行します。彼らはこれまでれるFilterChainを呼び出す前に、件名を承認するので史郎の既存のフィルタがこれをしない理由がある

: 件名認可基準を満たしていない場合は、フィルタチェーンも呼び出されることはありません(したがってなしありAuthorizationExceptionをキャッチする)

Shiroの別の動作を確認したい場合は、issueを提出し、潜在的な新機能としてご検討ください。

+0

Shiro 1.2.1では、任意のShiro例外がジェネリックServletExceptionにラップされます。 AbstractShiroFilter.doFilterInternalを参照してください。フィルタでShiroExceptionをキャッチすることはできません。 –

関連する問題