このような問題があります:Spring Security 3を使用する場合、ログインする必要があるときにリソース(GET経由)またはコミットフォーム(POST経由)を要求しようとします。 GET リクエスト (POST リクエストを作成しようとしても)。それで、どうすれば修正できるのだろうか?または、Spring Security が GET リクエストのみを保存して POST をスキップできるようにするにはどうすればよいでしょうか?
DefaultSavedRequest でそのようなコードを見つけました:
public boolean doesRequestMatch(HttpServletRequest request, PortResolver portResolver) {
...
if (!"GET".equals(request.getMethod()) && "GET".equals(method)) {
// A save GET should not match an incoming non-GET method
return false;
}
私が理解しているように、このメソッドはキャッシュリクエストと受信リクエストを比較し、受信リクエストがGETではなく、保存リクエストがGETである場合にのみ、リクエストが等しくないことを示しています。したがって、私の場合、保存リクエストは POST であり、受信は GET であるため、等しいと返されるため、正しく動作しません。私はそれで何ができますか?それはバグですか、それともそのような特定の比較に何らかの意味がありますか?
アップデート。 エラーを再実行すると、プライマリ説明が完全ではありませんでした。私はそれをより詳細に説明しようとします。フォームを開くGET URLがあり、ポップアップメッセージウィンドウでPOSTと同じURLでAJAX経由でコミットします。GET URL を実行すると、フォームが開きます。ログアウトしてから、フォームをコミットしてみます。ポップアップ ウィンドウ出力エラー。ログインして URL にリダイレクトしましたが (GET/POST 要求と同じです)、画面にはフォームが表示されませんが、AJAX 要求の JSON 応答と Firebug では、ログイン後に POST 要求が実行されることがわかります。ログイン後にキャッシュフィルターを削除すると同じURLにリダイレクトされるのですが、POSTリクエストとしてではなく、通常のGETリクエストとして機能し、フォームを開きます。