0

リソースに@RequiresGuestアノテーション付きのメソッドがあります。ログインしたユーザーがリンクにアクセスするUnauthenticatedExceptionと、このメッセージが表示されます。

ゲストのみの操作を実行しようとしています。現在のサブジェクトはゲストではありません(以前のログインから認証または記憶されています)。アクセス拒否。

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

4

1 に答える 1

1

これは通常、選択した MVC フレームワークに依存します。

  • 一部の UI メカニズム (JSP など) では、例外を処理するために使用できる「エラー ページ」を使用できます。
  • より洗練された UI フレームワークには、「すべてをキャッチ」する例外ハンドラーやコントローラーがあり、必要なことは何でも実行できます (例外の検査、HTTP ステータス コードの設定、特定の問題に固有のエラー ページへのエンド ユーザーのリダイレクトなど)。 .

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

フィルターは、try/catch ブロックで FilterChain を実行し、AuthorizationException をキャッチします。1 つをキャッチすると、「unauthorizedUrl」への 302 リダイレクトを発行します。

Shiro の既存のフィルターがこれを行わない理由は、FilterChain を呼び出す前にサブジェクトを承認するためです。サブジェクトが承認基準を満たさない場合、フィルター チェーンは呼び出されません(したがって、キャッチする AuthorizationException はありません)。

Shiro で別の動作を確認したい場合は、Issue を提出、潜在的な新機能として議論してください。

于 2012-05-01T16:49:44.247 に答える