SpringBoot集成SpringSecurity+JWT从0到1搭建登录权限项目

什么是security

Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它是 Spring 应用程序安全的事实标准。
Spring Security 是一个专注于为 Java 应用程序提供身份验证和授权的框架。与所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义需求。
图中是security的支持
创建项目




如图1所示先创建一个maven项目 记得springboot3 jdk版本必须得是java17
如图2所示 选择需要的依赖 如图所示是我需要的后面去里面还得增加 大家根据自己的实际情况进行
----------------------------
如3视频中展示 导入了security后他会自动的帮你在访问每个接口的时候添加一个登录页面账号是user 密码是后端显示的 这时候我们还没有做任何的配置,也可以在yml里面配置让他自定义用户名密码 但是不重要我们目前不需要 这个只是给大家简单演示介绍一下
认证用户实体信息

首先导入 fastjson 的maven 因为需要用到 @JSONField(serialize = false) 这个注解 按道理来讲password字段不应该返回给前端
新建用户实体类(根据你自己的实际情况创建) 例子如下
UserDetails
是 Spring Security 中的一个核心接口,用于表示系统中“已认证用户”的详细信息。Spring Security 在进行身份认证时会使用它来加载和存储用户信息。
实现UserDetails接口代码
大家可以看一下项目结构 项目结构如图所示
认证用户信息接口-介绍




- 创建一个service 实现UserDetailsService 这个接口 这个接口用于当用户尝试登录时,Spring Security 会调用你实现的
loadUserByUsername
方法:传入用户名 ,返回一个UserDetails
对象 ,如果找不到用户,抛出UsernameNotFoundException 如图1
- 考虑到大家 有可能有邮箱登录 手机号登录 或者第三方登录的需求 所以我们也要实现我们自己的service 接口
loadUserByUsername只用于账号密码登录方法 如图2
- 然后因为我们实现了UserDetails 这个实体类 我们可以把这个接口返回的参数改成我们的代码如下
我们可以在里面写一些判断和查询 然后放到实体类中并返回 例如下面代码 效果如第三个媒体视频所示
后面这里大家可以自行更改为查询数据库的逻辑
redis 配置

yml 配置
redis 工具类
不报错的话就是redis连接成功
jwt 接口配置




导入 工具包 和jwt 依赖
jwt工具类
jwt token效果如图2
jwt 拦截器配置

目录结构如图所示
security 配置

首先我们得 配置密码的加密bean
然后 这些是security的常用配置
配置方法 | 功能说明 |
| 关闭 CSRF 保护(适用于前后端分离) |
| 关闭默认登录页面(使用自定义 JWT 登录) |
| 关闭默认登出功能(使用前端控制登出) |
| 设置为无状态登录(禁用 Session,适配 JWT) |
| 添加自定义过滤器处理 OPTIONS 预检请求(跨域支持) |
| 启用跨域支持(CORS) |
| 放行登录接口 POST |
| 放行通用文件下载、Druid 控制台等接口 |
| 所有其他接口都需要认证 |
| 添加 JWT 认证过滤器,验证 Token 并设置认证信息 |
| 设置未认证时的异常处理器(返回自定义 JSON 提示) |
| 构建并返回完整的 SecurityFilterChain 安全配置 |
以下是我的配置
加完配置就如图变成了一个接口 就没有login页面了 如图所示
controller层验证

这种登录的代码 大家可以看一下 通过 UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(username, password); 这个 判断密码是否正确 进行验证 然后获取登录信息 解析为jwt token 返回给前端 或者后端直接存储到cookie 中也行
效果演示






- 首先我们如图1所示正常访问 输入我们设置好的账号和密码 登录成功后我们可以看到redis中已经有我们的用户信息了 如图2
- 然后复制返回的token 把它放到请求头的 Authorization里面
- 然后我们进行对比 图4 和图5 一个是有请求头属于登录了 一个是没有请求头属于没登录的效果
小结




- 如图1所示是第一次登录的流程 相当于只要用户认证成功那么就把信息往redis中存储一份 然后前端存储起来
- 然后访问接口如图2所示 携带token进行请求,解析token里uuid 通过uuid获取redis中的值 最后判断是否有值来访问接口









