ä¸.ç®ä»
   æä¹ åä»¤çæ¹æ¡å¨äº¤äºä¸ä¸æ£åå 坿¹æ¡ä¸è´ï¼é½æ¯å¨ç¨æ·å¾éRemember-meä¹åï¼å°çæç令çåéå°ç¨æ·æµè§å¨ä¸ï¼å¹¶å¨ç¨æ·ä¸æ¬¡è®¿é®ç³»ç»æ¶è¯»å该令çè¿è¡è®¤è¯ãä¸åçæ¯ï¼å®éç¨äºæ´å 严谨çå®å ¨è®¾è®¡ã
Â Â Â å¨æä¹ åä»¤çæ¹æ¡ä¸ï¼ææ ¸å¿çæ¯seriesåtoken两个å¼ï¼å®ä»¬é½æ¯ç¨MD5æ£åè¿çéæºå符串ãä¸åçæ¯seriesä» å¨ç¨æ·ä½¿ç¨å¯ç éæ°ç»å½æ¶æ´æ°ï¼ètokenä¼å¨æ¯ä¸ä¸ªsessionä¸é½éæ°çæã
Â Â Â è¿æ ·è®¾è®¡ç好å¤ï¼
   é¦å è§£å³äºæ£åå 坿¹æ¡ä¸ä¸ä¸ªä»¤çå¯ä»¥åæ¶å¨å¤ç«¯ç»å½çé®é¢ãæ¯ä¸ªä¼è¯é½ä¼å¼åtokenæ´æ°ï¼å³æ¯ä¸ªtokenä» æ¯æåå®ä¾ç»å½ã
Â Â Â å ¶æ¬¡ï¼èªå¨ç»å½ä¸ä¼å¯¼è´seriesåæ´ï¼èæ¯æ¬¡èªå¨ç»å½é½éè¦åæ¶éªè¯seriesåtoken两个å¼ï¼å½è¯¥ä»¤çè¿æªä½¿ç¨è¿èªå¨ç»å½å°±è¢«çåæ¶ï¼ç³»ç»ä¼å¨éæ³ç¨æ·éªè¯éè¿åå·æ°tokenå¼ï¼æ¤æ¶å¨åæ³ç¨æ·çæµè§å¨ä¸ï¼è¯¥tokenå¼å·²ç»å¤±æãå½åæ³ç¨æ·ä½¿ç¨èªå¨ç»å½æ¶ï¼ç±äºè¯¥series对åºçtokenä¸åï¼ç³»ç»å¯ä»¥æ¨æè¯¥ä»¤çå¯è½è¢«çç¨ï¼ä»èåä¸äºå¤çãä¾å¦æ¸ çè¯¥ç¨æ·èªå¨ç»å½ä»¤çï¼å¹¶éç¥è¯¥ç¨æ·å¯è½å·²è¢«çå·çã
äº.宿
1.å建ä¸å¼ persistent_logins表
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for persistent_logins
-- ----------------------------
DROP TABLE IF EXISTS `persistent_logins`;
CREATE TABLE `persistent_logins` (
`username` varchar(64) COLLATE utf8mb4_bin NOT NULL,
`series` varchar(64) COLLATE utf8mb4_bin NOT NULL,
`token` varchar(64) COLLATE utf8mb4_bin NOT NULL,
`last_used` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`series`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
2.WebSecurityConfigé ç½®
package com.zit.springsecurity.configuration;
import com.zit.springsecurity.service.MyUserDetailsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl;
import javax.sql.DataSource;
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
@Qualifier("myDataSource")
private DataSource dataSource;
@Autowired
private MyUserDetailsService myUserDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception{
auth.userDetailsService(myUserDetailsService).passwordEncoder(new MyPasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception{
JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
jdbcTokenRepository.setDataSource(dataSource);
http.authorizeRequests()
.antMatchers("/admin/api/**").hasRole("ADMIN")
.antMatchers("/user/api/**").hasRole("USER")
.antMatchers("/app/api/**").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable()
.formLogin()
.and()
// æ·»å èªå¨ç»å½åè½ï¼é»è®¤ä¸ºç®åæ£åå å¯
.rememberMe().userDetailsService(myUserDetailsService)
.tokenRepository(jdbcTokenRepository);
}
}
3.ææ
