场景应用:SpringSecurity记住我功能实现
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了场景应用:SpringSecurity记住我功能实现相关的知识,希望对你有一定的参考价值。
文章目录
记住我功能实现
Spring Security 中 Remember Me 为“记住我”功能,用户只需要在登录时添加 remember-me 复选框,取值为 true。
Spring Security 会自动把用户信息存储到数据源中,以后就可以不登录进行访问。
引入依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
修改核心属性文件添加数据源信息(4项)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
编写配置类
SpringSecurity的令牌持久化接口PersistentTokenRepository的一个实现类JdbcTokenRepositoryImpl。
他的作用就是将原本存于内存的session存入数据库。
@Configuration
public class RememberMeConfig
@Autowired
private DataSource dataSource;
@Bean
public PersistentTokenRepository persistentTokenRepository()
//创建JdbcTokenRepositoryImpl对象
JdbcTokenRepositoryImpl repository = new JdbcTokenRepositoryImpl();
//设置数据源
repository.setDataSource(dataSource);
//自动建表存储 rememberme 信息,第一次启动执行下面代码,是为了在数据库中创建数据表,
// 第二次就要注释掉,因为表存在,再执行创建表就会报错
repository.setCreateTableOnStartup(true);
return repository;
修改 SecurityConfig 配置类
http.rememberMe()
.userDetailsService(userDetailsService) //登录逻辑交给哪个对象
.tokenRepository(repository); //持久层对象
在客户端页面中添加复选框
在客户端登录页面中添加 remember-me 的复选框,只要用户勾选了复选框下次就不需要进行登录了。注意:属性名默认必须为"remember-me"。
<form action = "/login" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="text" name="password"/><br/>
<input type="checkbox" name="remember-me" value="true"/> <br/>
<input type="submit" value="登录"/>
</form>
设置 rememberme 有效时间
有效时间默认为 2 周。
//remember Me
http.rememberMe()
.tokenValiditySeconds(120)//单位:秒
.tokenRepository(repository)
.userDetailsService(userDetailsServiceImpl);
退出登录
用户只需要向 Spring Security 项目中发送/logout 退出请求即可。实现退出非
常简单,只要在页面中添加/logout 的超链接即可。
<a href="/logout">退出登录</a>
退出成功后指定配置路径,可以通过下面的方法进行修改。
http.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login.html");
以上是关于场景应用:SpringSecurity记住我功能实现的主要内容,如果未能解决你的问题,请参考以下文章
八SpringSecurity Web权限方案——记住我功能用户注销功能
#私藏项目实操分享#Spring专题「技术原理」Spring Security的核心功能和加载运行流程的原理分析
SpringBoot集成SpringSecurity(十记住我)
项目一众筹网07_04_SpringSecurity记住我数据库登录-默认实现创建UserDetailsService类装配UserDetailsService怎么改源码