# springboot整合springSecurity+JWT
**Repository Path**: griffinwh/springboot-security-jwt
## Basic Information
- **Project Name**: springboot整合springSecurity+JWT
- **Description**: 登录:
自定义登录接口
调用ProviderManager的方法进行认证,如果认证通过生成jwt,把用户信息存入redis中
自定义UserDetailsService
在这个实现查询数据库
校验:
定义jwt认证过滤器
获取token
解析token,获取其中userid
从redis中获取用户信息
存入securityContextHolder中
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-03-20
- **Last Updated**: 2025-03-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# springboot整合springSecurity+JWT
# 1,快速入门
## 1.1 搭建springboot项目

## 1.2 导 SpringSecurity依赖
```
org.springframework.boot
spring-boot-starter-security
```
导入依赖后,再启动项目,security会自动拦截访问的接口。用户名:user;密码会在控制台中打印出来。
# 2,认证
## 2.1 登录校验流程

## 2.1 原理初探
### 2.2.1 SpringSecurity 完整流程
SpringSecurity的原理其实是一个过滤器链,内部包含各种功能过滤器。下图为引入security依赖后自带的过滤器。

- UsernamePasswordAuthenticationFilter:对用户名密码的过滤。
- ExceptionTranslationFilter:对异常的捕获处理。
- FilterSecurityInterceptor:权限校验过滤器。

### 2.2.2 认证流程详解

登录接口

其他接口

## 2.3 解决问题
### 2.3.1 思路分析
登录:
- 自定义登录接口
- 调用ProviderManager的方法进行认证,如果认证通过生成jwt,把用户信息存入redis中
- 自定义UserDetailsService
- 在这个实现查询数据库
校验:
- 定义jwt认证过滤器
- 获取token
- 解析token,获取其中userid
- 从redis中获取用户信息
- 存入securityContextHolder中
### 2.3.2 准备工作
#### 配置redis
添加依赖
```xml
org.springframework.boot
spring-boot-starter-data-redis
```
添加配置类
```java
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//key采用String的序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
// hash的key也采用String的序列化方式
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
RedisSerializer