5. Spring Boot + Spring Security 记住我功能
个人理解:集成spring security框架,只需要简单的配置即可
基本流程:
浏览器认证用户名密码请求,认证成功后,有一个TOkenRepository 来保存用户名和密码,并且存储到自动的数据库中,下次用户再规定时间内登陆用户就直接从记住过滤器中读取Cookie中的Token用户名,然后通过通过T欧肯Repository 用户名去访问DB 数据库,并判断是否跟数据库中的数据是否一致,并且返回UserDetailsService
- 设置记住我
的过期时间为一天,
- 配置文件BrowserSecurityConfig.java
protected void configure(HttpSecurity http) throws Exception {
ValidateCodeFilter validateCodeFilter = new ValidateCodeFilter();
validateCodeFilter.setAuthenticationFailureHandler(imoccAuthenticationFailUrlHandler);
validateCodeFilter.setSecurityProperties(securityProperties);
validateCodeFilter.afterPropertiesSet();
http.addFilterBefore(validateCodeFilter,UsernamePasswordAuthenticationFilter.class)//validatecodeFilter过滤器加载到用户名密码过滤器校验的前面
.formLogin()//表单认证
.loginPage("/authentication/require")//添加自定义登陆界面
.loginProcessingUrl("/authentication/from")//这个URL用UsernamePasswordAuthenticationFilter来处理
.successHandler(imoccAuthenticationSuccessHandler)
.failureHandler(imoccAuthenticationFailUrlHandler)
.and()
//配置记住我
.rememberMe()
.tokenRepository(persistentTokenRepository())
.tokenValiditySeconds(securityProperties.getBrowser().getRemeberMeSeconds())
.userDetailsService(userDetailsService)
//http.httpBasic()//弹出框认证
.and()
.authorizeRequests()//对请求做一个授权
.antMatchers("/authentication/require"
,securityProperties.getBrowser().getLoginPage()
,"/code/image").permitAll()//访问这个页面的时候不需要授权
.anyRequest()//任何请求
.authenticated()//身份认证
.and()
.csrf().disable();//关闭跨站请求伪造
}