はじめに
IT関係のお世話になった方々や同級生らの社会での活躍を目にして、こんな風に生きたかったなと思う休日です。
さて、今日はremember-meやlogoutがうまく動作しなかった問題をテーマにします。
動作環境
Spring Boot 2.6.3
Java SE11
実装しようとしたこと
ログイン状態を保持するためのremember-meの実装を試みました。
Spring Securityを使用して下記サイトを参考にしました。
.and() .rememberMe().key("uniqueAndSecret")
問題点
java.lang.IllegalStateException: UserDetailsService is required.
が表示される。
UserDetailsServiceはもう実装しているはずだけれど何で?となりました。
というのも、DAOAuthenticationProvider内でUserDetailsServiceはセット済だからです。
しかし、よく調べると
UserDetailsService からユーザーの詳細を取得する AuthenticationProvider 実装。
とのことで、AutheticationManagerBuilderでUserDetailsServiceに基づいて認証を行うのとでは違うことが分かりました。
解決までのプロセス
そこで、AuthenticationManagerBuilderにUserDetailsServiceを追加して動作確認したところうまく動きました。
...2重で認証している...と思ったので他の解決策を探し、下記ドキュメントを参考にしました。
使用したのはalwaysRememberとuserDetailsServiceです。
これで動きました。
投げやり(logoutの件)
logoutはpostじゃないと機能しないそうです。