本篇文章简单介绍spring-security给我们提供的remember me功能的使用方法,参数名、配置方式采用spring默认配置,后续章节进一步探讨时会详细说明自定义的方式。
环境:
spring boot 版本:1.5.4.RELEASE
1.项目结构
application.yml文件是放在src/main/resources/目录下
2.配置类SecurityConfig.java
/** * */ package nariis.chengf.security.samples.javaconfig.remeberme; import org.springframework.beans.factory.annotation.Autowired; 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; /** * @author: 作者: chengaofeng * @date: 创建时间:2018-01-16 19:32:47 * @Description: TODO * @version V1.0 */ @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void auth(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("user").password("password").authorities("ROLE_USER"); } @Override protected void configure(HttpSecurity http) throws Exception { http .csrf() .disable() .authorizeRequests() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login.html") .permitAll() .and() .rememberMe() .and() .logout() .logoutSuccessUrl("/login.html"); } }
为了简单,这个示例中禁止了csrf检查,利用基于memory的认证
2.启动类RemeberMeApp.java
package nariis.chengf.security.samples.javaconfig.remeberme; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * Hello world! * */ @SpringBootApplication public class RemeberMeApp { public static void main( String[] args ) { SpringApplication.run(RemeberMeApp.class, args); } }
3.项目的pom.xml
4.0.0 nariis.chengf security-samples-javaconfig-remeberme 0.0.1-SNAPSHOT jar security-samples-javaconfig-remeberme http://maven.apache.org UTF-8 org.springframework.boot spring-boot-starter-parent 1.5.4.RELEASE pom import junit junit test org.springframework.boot spring-boot-starter-web org.springframework.security spring-security-config org.springframework.security spring-security-web org.springframework.boot spring-boot-maven-plugin repackage ${start-class}
4.登录页面login.html
Please Login
设置了一个名称为remember-me 的checkbox,因为采用spring 默认配置,此处名字必须叫这个
5.登录成功后默认的欢迎页index.html
Static hello! wait for 2 minutes and refresh the browser,you will still be here.
6.项目配置文件application.yml
server: session: timeout: 120
因为spring 内嵌tomcat的session的默认存活时间是30分钟,这里为了更好的验证remember me功能,我们把session的存活时间改成了2分钟
7.启动项目
选中启动类,选择 Run As -> Java application,正常启动后,在浏览器中输入
http://localhost:8080/login.html,正常情况下,将进入如下界面
输入用户名:user,密码:password,选中Remember me,点击login,之后我们会被重定向到欢迎页
之后让我们等待超过两分钟等着session过期,重新刷新界面,会发现我们仍然处于login状态,如果我们在之前的login界面没有选中remember me,在这个页面等待超过两分钟刷新后我们将被重新定向到login页面,要求我们重新登录
默认情况下,spring默认采用的是TokenBasedRememberMeServices,在这个类的onLoginSuccess方法中可以明确看出默认的记住时长是TWO_WEEKS_S(两周)
下载源码