新しいユーザーが「新規アカウント」フォームを送信した後、そのユーザーを手動でログして後続のページにログインする必要がなくなります。Spring Security/SpringMVCで認証されたユーザーを手動で設定する方法
春のセキュリティインターセプタを通過する通常のフォームのログインページは正常に動作します。
私はUsernamePasswordAuthenticationTokenを作成し、手動たSecurityContextでそれを設定しています新しいアカウントフォームコントローラで:
:私は、後でユーザーがでログインしていることを確認し、同じページでSecurityContextHolder.getContext().setAuthentication(authentication);
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
これは、以前に認証で設定した権限を返します。すべては順調です。
しかし、ロードする次のページでこのコードを呼び出すと、認証トークンはUserAnonymousになります。
なぜ私は前回のリクエストで設定した認証を保持していないのか分かりません。何かご意見は?
- セッションIDが正しく設定されていない可能性がありますか。
- どういうわけか私の認証を上書きする可能性がありますか?
- 私は認証を保存するために別の手順が必要なのでしょうか?
- また、何らかの理由で1回のリクエストではなく、セッション全体で認証を宣言する必要があるのでしょうか?
ここで何が起こっているのかを知るのに役立ついくつかの考えを探してください。
あなたは私の答えに従うことができますhttp://stackoverflow.com/questions/4824395/spring-security-forward-directive-cant-forward-to-login-form/7972971#7972971 – AlexK
読者は、 'SecurityContextHolder.getContext()。あなたがそうするように言うなら、この質問。setAuthentication(認証) '。それは機能し、一般的ですが、あなたがそれを行うならば、あなたが満たすであろう重大な機能上の欠点があります。詳細については、私の質問と答えを参照してください:https://stackoverflow.com/questions/47233187/spring-security-manual-login-best-practice – goat