项目地址:https://gitee.com/xxxiaowu/springsecurity-mybatis
*记住我功能在网站上是比较常见的功能,它大致就是我们在勾选了记住我这个按钮,在多长时间之内,用户不需要登陆就可以访问资源。
这个功能在SpringSecurit 里边大致就是,我们点击记住我之后,Spring Security会生成一个token标识,然后将该token标识持久化到数据库,并且生成一个与该token相对应的cookie返回给浏览器。当用户过段时间再次访问系统时,如果该cookie没有过期,Spring Security便会根据cookie包含的信息从数据库中获取相应的token信息,然后帮用户自动完成登录 *** 作
spring: datasource: url: jdbc:mysql://localhost:3306/security?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456
导入相关的依赖
org.springframework.boot spring-boot-starter-webmysql mysql-connector-javaorg.mybatis.spring.boot mybatis-spring-boot-starter2.1.4 org.springframework.boot spring-boot-starter-security
然后在SecurityConfig中配置token持久化对象
@EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private DataSource dataSource; @Autowired private UserService userService; public PersistentTokenRepository persistentTokenRepository(){ JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl(); jdbcTokenRepository.setDataSource(dataSource); jdbcTokenRepository.setCreateTableOnStartup(false);//false是我们自己手动配置 return jdbcTokenRepository; } ............... }
PersistentTokenRepository为一个接口类,这里我们用的是数据库持久化,所以实例用的是PersistentTokenRepository的实现类JdbcTokenRepositoryImpl。
JdbcTokenRepositoryImpl需要指定数据源,所以我们将配置好的数据源对象DataSource注入进来并配置到JdbcTokenRepositoryImpl的dataSource属性中。createTableOnStartup属性用于是否启动项目时创建保存token信息的数据表,这里设置为false,我们自己手动创建。
通过查看JdbcTokenRepositoryImpl,我们会发现它需要创建一个数据库,用来存储这些信息
创建数据库的sql语句如下
CREATE TABLE persistent_logins ( username VARCHAR (64) NOT NULL, series VARCHAR (64) PRIMARY KEY, token VARCHAR (64) NOT NULL, last_used TIMESTAMP NOT NULL );
配置登录页面
这里的name属性,默认要设置成remember-me的,如果设置成其它的,需要在SecurityConfig中进行设置
记住我欢迎分享,转载请注明来源:内存溢出
评论列表(0条)