0

最近、ログイン後の最後のリクエスト URL に関する問題に直面しています。通常、すべてが正常に機能します。しかし、次の手順に進むと、問題が発生します。

  1. 1 つのタブでアプリを開き、ログインする
  2. このタブでは、サーバーへの AJAX リクエストが定期的に処理される場所に移動します
  3. アプリで新しいタブを開きます (まだログインしています)
  4. このタブでログアウトします
  5. その間、最初のタブからの AJAX リクエストは自動的に HTTP 401 で処理されます (ログアウトしたため)。
  6. 2番目のタブで再度ログインしようとすると、最後のリクエストだったため、1番目のタブからAJAXリクエストのJSONを受け取ります。

Spring Security は、「最後のリクエスト URL」に対する AJAX リクエストを無視すると思われます。これをどこかに設定することは可能ですか?または、これに対する適切な回避策はありますか?

ありがとう、マテオ

4

1 に答える 1

2

ユーザーがブラウザをナビゲートすることによって開始された「通常の」リクエストと ajax リクエストを区別する一般的な方法はないと思います。アプリケーションでそれらを区別できる場合 (たとえば、パターンに一致する特定の URL に ajax リクエストをマッピングすることによって)、探しているものを簡単に実装できます。(編集: ajax リクエストを識別する簡単な方法は、Sérgio の以下のコメントで提案されています。)

ログインが成功した後にリダイレクトを実行する責任があるコンポーネントは ですSavedRequestAwareAuthenticationSuccessHandler。したがって、フレームワークのデフォルトの動作をカスタマイズする 1 つの可能な方法は、独自の を提供AuthenticationSuccessHandlerし、それを に注入することUsernamePasswordAuthenticationFilterです。クラスでを自動配線しRequestCache、最後にキャッシュされたリクエストを再生するか、それが ajax リクエストであることがわかっている場合に単に無視するかを決定できるはずです。

于 2013-05-13T12:52:42.950 に答える