困っていること
spring securityの機能であるremember-meを実装しても、30分たらずで画面再読み込みするとログイン画面がでてしまいます。remember-meのCookie情報も消えていました。
※ログイン直後は開発コンソールを見ると、remember-meのCookie情報は保存されていました。
試したこと
以下のURLを何個か参考にしましたが、結果はかわらず…
→ちなみにこのサイトに載ってる方法で試すと、なぜかUserDetailsServiceのloadUserByUsernameが2回呼び出されるという謎仕様が発生します。
環境
- OS: Windows_NT x64 10.0.18362
- vscode: Version: 1.35.1 (user setup)
- Chrome: 66.0.3359.181
- Java: Version1.8
- Spring Boot 5
- tomcat 9
実装内容
※ソースは途中より引用
html5
1<div class="container"> 2 <form method="POST" th:action="@{/login}" class="form-signin"> 3 <div class="form-label-group" th:classappend="${param.error} ? 'is-invalid'"> 4 <h1 th:text="#{app.title}" class="form-heading text-center"></h1> 5 <input name="loginId" type="text" class="form-control" placeholder="ログインID" required /> 6 <input id="input_pass" type="password" class="form-control" placeholder="パスワード" required /> 7 <input name="password" id="encrypt_pass" type="hidden" /> 8 <div class="custom-control custom-checkbox"> 9 <input type="checkbox" class="custom-control-input" name="remember-me" id="remember-me" value="true" checked> 10 <label class="custom-control-label" for="remember-me">ログイン状態を保持する</label> 11 </div> 12 <button id="login" type="submit" class="btn btn-primary btn-block btn-flat"> 13 <span class="oi oi-account-login"></span> 14 <span> ログイン</span> 15 </button> 16 <input type="hidden" name="_csrf" value="5e5f0472-c675-43ad-be0a-d673a0325db4" /> 17 </div> 18 </form> 19</div>
Java
1@Override 2protected void configure(HttpSecurity http) throws Exception { 3 http 4 .headers() 5 .frameOptions().sameOrigin() 6 .and() 7 .authorizeRequests() 8 .antMatchers("/resources/**", "/webjars/**","/css/**","/js/**","/img/**").permitAll() 9 .antMatchers("/login").permitAll() 10 .antMatchers("/error").permitAll() 11 .antMatchers("/admin/**").hasAuthority("ADMIN") 12 .antMatchers("/**").hasAnyAuthority("ADMIN","USER") 13 .anyRequest().authenticated() 14 .and() 15 .formLogin() 16 .loginPage("/login") 17 .defaultSuccessUrl("/top") 18 .failureUrl("/login?error") 19 .usernameParameter("loginId") 20 .passwordParameter("password") 21 .permitAll() 22 .and() 23 .logout() 24 .logoutRequestMatcher(new AntPathRequestMatcher("/logout")) 25 .logoutSuccessUrl("/login?logout") 26 .permitAll() 27 .and() 28 .rememberMe().tokenRepository(tokenRepository()).tokenValiditySeconds(30 * 24 * 60 * 60) 29 .and() 30 .exceptionHandling() 31 .accessDeniedPage("/error"); 32} 33 34@Bean 35public PersistentTokenRepository tokenRepository(){ 36 JdbcTokenRepositoryImpl tr = new JdbcTokenRepositoryImpl(); 37 tr.setDataSource(dataSource); 38 return tr; 39}
セキュリティ対策としてtokenRepositoryを宣言したり、tokenValiditySecondsログイン情報保持時間を指定してます。
お世話になりますが、誰か原因がわかる方ご教示お願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。