八SpringSecurity Web权限方案——记住我功能用户注销功能
Posted 上善若水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八SpringSecurity Web权限方案——记住我功能用户注销功能相关的知识,希望对你有一定的参考价值。
一、记住我功能
1.1、创建表
CREATE TABLE `persistent_logins` (
`username` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`series` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`token` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`last_used` timestamp NOT NULL,
PRIMARY KEY (`series`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
1.2、添加数据库配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test_db?serverTimezone=GMT%2B8
username: root
password: root
1.3、编写配置类
package com.xbmu.config;
import com.xbmu.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl;
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;
import javax.sql.DataSource;
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter
@Autowired
private LoginService loginService;
@Autowired
private DataSource dataSource;
@Bean
public PersistentTokenRepository persistentTokenRepository()
JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
// 赋值数据源
jdbcTokenRepository.setDataSource(dataSource);
// 自动创建表,第一次执行会创建,以后要执行就要删除掉!
// jdbcTokenRepository.setCreateTableOnStartup(true);
return jdbcTokenRepository;
@Bean
PasswordEncoder password()
return new BCryptPasswordEncoder();
@Override
protected void configure(HttpSecurity http) throws Exception
// 开启记住我功能
http.rememberMe().tokenRepository(persistentTokenRepository()).userDetailsService(loginService);
http.exceptionHandling().accessDeniedPage("/unAuth.html");
http.formLogin() // 自定义登录页面
.loginPage("/login.html") // 设置登录页面
.loginProcessingUrl("/user/login") // 登录请求访问路径
.defaultSuccessUrl("/user/index").permitAll() // 登录成功之后,跳转的路径。
.and().authorizeRequests()
.anyRequest().authenticated() // 设置其他请求需要认证
.and().csrf().disable(); // 关闭csrf防护
1.4、页面添加记住我复选框
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/user/login" method="post">
用户名:<input type="text" name="username"/>
<br/>
密 码:<input type="password" name="password"/>
<br/>
记住我:<input type="checkbox" name="remember-me" title="记住密码"/>
<br/>
<input type="submit" name="login" title="登录"/>
</form>
</body>
</html>
1.5、测试
登录成功之后,关闭浏览器再次访问 http://localhost:8081/user/index,发现依然可以使用!
1.6、设置有效期
默认2周时间。但是可以通过设置状态有效时间,即使项目重新启动下次也可以正常登录。
二、用户注销功能
2.1、在登录成功页面添加一个退出链接
success.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
登录成功<br>
<a href="/logout">退出</a>
</body>
</html>
2.2、在配置类中添加退出映射地址
2.3、测试
以上是关于八SpringSecurity Web权限方案——记住我功能用户注销功能的主要内容,如果未能解决你的问题,请参考以下文章
六SpringSecurity Web权限方案—— 基于数据库实现权限认证
六SpringSecurity Web权限方案—— 基于数据库实现权限认证