SpringSecurity 记住我

SpringSeucrity中的记住我功能会自动把用户信息存储到数据源中,并且官方提供了一张专门用于存储该用户的数据表。

CREATE TABLE persistent_logins(
	username varchar(64) NOT NULL,
	series varchar(64) NOT NULL,
	token varchar(64) NOT NULL,
	last_used timestamp NOT NULL,
	PRIMARY KEY(series)
)ENGINE = INNODB DEFAULT CHARSET=utf8

SpringSecurity实现RememberMe功能时底层实现依赖于Spring-JDBC,所以需要导入Spring-JDBC。如果使用其他ORM框架,可以直接导入该ORM的框架,如mybatis。

前端表单中,记住我的复选框的name默认为remember-me,value值必须为true<input type="checkbox" name="remember-me" value="true">

一、依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.3</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

二、配置类

//记住我
http.rememberMe()
    //自定义登录逻辑
    .userDetailsService(userDetailService)
    //.rememberMeParameter() 对复选框中参数名的修改
    //失效时间
    .tokenValiditySeconds(60*60*24*30)
    //持久层对象
    .tokenRepository(persistentTokenRepository());


/**
 * 持久层对象
 */
@Bean
public PersistentTokenRepository persistentTokenRepository(){
    JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
    //dataSource数据源由依赖注入获得
    jdbcTokenRepository.setDataSource(dataSource);

    return jdbcTokenRepository;
}

三、表单

<form action="/login" method="post">
    <input type="text" placeholder="用户名" name="username">
    <input type="password" placeholder="密码" name="password">
    <button type="submit" >登录</button>
    记住我 <input type="checkbox" name="remember-me" value="true">
</form>
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页