springsecurity實現自動登錄很簡單,人家讓我們配置一下就好了
1.首先得要有數據源 和 操作數據庫的對象,只有這兩個才能往表中寫token;在配置類中注入數據源,在容器中加入 操作數據庫的對象
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Autowired private DataSource dataSource; @Bean public PersistentTokenRepository persistentTokenRepository(){ JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl(); //操作數據庫的對象 jdbcTokenRepository.setDataSource(dataSource); //設置數據源 jdbcTokenRepository.setCreateTableOnStartup(true); //在啟動時創建表,該表用於記錄token,但建議自己創建,因為第二次重啟時會報錯,因為該表已經存在 return jdbcTokenRepository; }
2.配置自動登錄。下面是真正配置自動登錄的代碼,如下:
protected void configure(HttpSecurity http) throws Exception {
http.formLogin().and().rememberMe().tokenValiditySeconds(300).tokenRepository(persistentTokenRepository()).userDetailsService(userDetailsService) }
我來解釋下,tokenValiditySeconds()是設置token保存的時間,也就是說token在cookie保存的時間;tokenRepository()是設置哪個數據庫操作對象來操作數據庫;userDetailsService()是設UserDetailsService,如果有看過原理圖應該知道,springsecurity的自動登錄是幫我們從token中提取用戶名和密碼,然后還要調用UserDetailsService的方法進行最終的用戶名和密碼的比對。
3.最后一個步驟,需要一個頁面,一個【記住我】的表單項,如下:
<input type="checkbox" name="remember-me">記住我
name的值一定是 remember-me ,不然人家識別不了