大事件Day01

登录的时候我要进行登录和密码的位数进行校验

但是这样进行校验太麻烦了

使用Spring Validation,对注册接口的参数进行合法性校验

1.引入Spring Validation起步依赖

  1. 在参数前面添加@Pattern 注解

  2. 在Controller类上添加@Validated

再进行这一系列操作之后

再次发送请求后

这是不满足正则表达式,所以会抛出异常,那么我需要设置全局异常处理器,我们先进行一个单独的类,Exception

@RestControllerAdvice

然后就是接收什么类的异常

ExceptionHandler(exception.class)

写完之后

用户登录成功后,系统会自动下发JWT令牌,然后在后续的每次请求中,浏览器都需要在请求头header中携带到服务端,请求头的名称为Authorization,值为"登录时下发的JWT令牌"

为啥会有JWT令牌,因为在我们自己检查接口的时候,我们哪怕不登录我也可以访问其他接口,但是现实是,我们必须先登录才可以访问其他接口,那么就有了JWT令牌,登录之后系统会下发个JWT令牌,以后,每次访问的时候都会带着这个令牌进行访问

令牌就是一段字符串

承载业务数据,减少后续请求查询数据库的次数 (在准备查找用户数据的时候,我们可以从令牌中查找)

防篡改,保证信息的合法性和有效性

JWT 组成

第一部分:Header(头), 记录令牌类型,签名算法等

第二部分:Payload(有效载荷), 携带一些自定义信息,默认信息等

第三部分:Signature(签名),防止Token被篡改,确保安全性。将header,payload,并加入指定秘钥,

那么怎么使用JWT令牌

首先就是导入依赖,JWT令牌,这里顺便导入一个测试类

<dependency>

<groupId>com.auth0</groupId>

<artIfactId>java-jwt</artifactId>

</dependency>

withClaim则是在有效载荷中加入信息

withExpiresAt则是声明JWT令牌的有效时间

sign则是签名算法,Algorithm.HMAC256()这个只是其中之一,其中的参数便是秘钥

解析JWT令牌

其中token令牌和签名算法以及密钥都必须一样

当我们携带着JWT令牌发送请求的时候,我们可以从请求头中接收Authorization的值也就是JWT令牌,另外一个参数,服务端返回客户端的http响应,响应中带着信息

那么问题来了,一个项目有很多的controller层那么我们不可能一个一个的学,当那么多的请求需要验证的时候,我们就需要一个全局拦截器了

从请求头中名称为 Authorization获取token,然后就用parseToken校验,如果校验成功return true也就是放行,反之则不然,我们需要把它放到IOC容器,为啥,因为我们要让我们的系统知道我们开发了一个拦截器,

我们需要把我们弄了拦截器放入拦截器中,但是我们发现我们拦截的是一些除了登录以外需要进行令牌校验的,但是很显然,我们登录和注册的是时候不需要令牌,那么我就需要取消这些请求的拦截

相关推荐
清水白石0087 分钟前
深入解析 LRU 缓存:从 `@lru_cache` 到手动实现的完整指南
java·python·spring·缓存
林开落L8 分钟前
从零开始学习Protobuf(C++实战版)
开发语言·c++·学习·protobuffer·结构化数据序列化机制
牛奔12 分钟前
Go 是如何做抢占式调度的?
开发语言·后端·golang
符哥200820 分钟前
C++ 进阶知识点整理
java·开发语言·jvm
小猪咪piggy20 分钟前
【Python】(4) 列表和元组
开发语言·python
Sayuanni%332 分钟前
初阶_多线程1(线程含义与关键属性)
java
程序媛徐师姐33 分钟前
Java基于微信小程序的模拟考试系统,附源码+文档说明
java·微信小程序·java模拟考试系统小程序·模拟考试微信小程序·模拟考试系统小程序·模拟考试小程序·java模拟考试小程序
難釋懷33 分钟前
Lua脚本解决多条命令原子性问题
开发语言·lua
CoderCodingNo41 分钟前
【GESP】C++ 二级真题解析,[2025年12月]第一题环保能量球
开发语言·c++·算法
疯狂敲代码的老刘42 分钟前
JDK 1.6到25 全版本网盘合集 (Windows + Mac + Linux)
java·linux·windows·macos·jdk