新しいユーザーが「新しいアカウント」フォームを送信した後、そのユーザーを手動でログインして、後続のページにログインする必要がないようにしたいと考えています。
春のセキュリティインターセプターを通過する通常のフォームログインページは問題なく機能します。
new-account-formコントローラーで、UsernamePasswordAuthenticationTokenを作成し、それをSecurityContextに手動で設定しています。
SecurityContextHolder.getContext().setAuthentication(authentication);
同じページで、後でユーザーがログインしていることを確認します。
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
これにより、認証で以前に設定した権限が返されます。すべては順調です。
しかし、この同じコードがロードする次のページで呼び出されると、認証トークンはUserAnonymousになります。
前回のリクエストで設定した認証が保持されなかった理由がわかりません。何かご意見は?
- セッションIDが正しく設定されていないことが原因である可能性がありますか?
- どういうわけか私の認証を上書きしている可能性があるものはありますか?
- おそらく、認証を保存するために別の手順が必要なだけですか?
- または、どういうわけか単一の要求ではなく、セッション全体で認証を宣言するために必要なことはありますか?
ここで何が起こっているのかを理解するのに役立つかもしれないいくつかの考えを探しています。
SecurityContextHolder.getContext().setAuthentication(authentication)
。これは機能し、一般的ですが、それを行うだけでは深刻な機能上の欠点が発生します。:詳細情報については、私の質問を参照してください、と答えstackoverflow.com/questions/47233187/...