Spring Securityでログインした状態を残す
新規プロジェクトで利用しているSpring Boot + Spring Securityですが、ログインした状態を残すためRemember-meという機能を利用しました
Remember-meを有効にする
Remember-meは、HttpSecurityへの設定とログインフォームへの追加で有効になります
HttpSecurityへの設定は、WebSecurityConfigurerAdapterを実装したクラスで行いました
@Override protected void configure(HttpSecurity http) throws Exception { http .... .and() .rememberMe() // ログイン状態を保持する ; }
Thymeleafを利用したログインフォームは、以下のように追加しました
<input class="form-check-input" type="checkbox" name="remember-me" id="remember-me" value="on" checked />
以上で、JSESSIONIDを削除しても、Remember-meによりセッションが維持されます
Remember-meを永続化する
しかしこのままでは、サーバを再起動するとRemember-meが機能しなくなります ユーザーの利便性を考えると、サーバーを再起動するたびにログインが発生することは好ましくありません そこで、Remember-meの情報をデータベースに保存することで、解決してみます
先程の設定に、以下のように設定を追加します
@Override protected void configure(HttpSecurity http) throws Exception { http .... .and() .rememberMe() // ログイン状態を保持する .tokenRepository(createTokenRepository()) // Remember-meをデータベースに保存する ; } public PersistentTokenRepository createTokenRepository() { JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl(); tokenRepository.setDataSource(dataSource); return tokenRepository; }
Remember-meの情報を保存するPersistentTokenRepositoryとして、データベースに保存する実装JdbcTokenRepositoryImplを利用するよう設定します 以上で、サーバを再起動しても、Remember-meが機能されるようになります