大事件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容器,为啥,因为我们要让我们的系统知道我们开发了一个拦截器,

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

相关推荐
秃了也弱了。1 分钟前
ElasticSearch:优化案例实战解析(持续更新)
android·java·elasticsearch
l1t1 分钟前
与系统库同名python脚本文件引起的奇怪错误及其解决
开发语言·数据库·python
Jackey_Song_Odd6 分钟前
Part 1:Python语言核心 - 内建数据类型
开发语言·python
切糕师学AI13 分钟前
编程语言 Erlang 简介
开发语言·erlang
sycmancia14 分钟前
C++——C++中的类型识别
开发语言·c++
还是大剑师兰特15 分钟前
Vue3 按钮切换示例(启动 / 关闭互斥显示)
开发语言·javascript·vue.js
星空露珠18 分钟前
迷你世界UGC3.0脚本Wiki角色模块管理接口 Actor
开发语言·数据库·算法·游戏·lua
我星期八休息18 分钟前
深入理解哈希表
开发语言·数据结构·c++·算法·哈希算法·散列表
一叶落43825 分钟前
LeetCode 54. 螺旋矩阵(C语言详解)——模拟 + 四边界收缩
java·c语言·数据结构·算法·leetcode·矩阵
最初的↘那颗心29 分钟前
Prompt 工程实战:五要素框架与 Spring AI 模板化落地
java·大模型·prompt工程·spring ai·ai应用开发