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

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

相关推荐
揽星河..5 分钟前
【C语言】底层程序设计
c语言·开发语言
JavaPub-rodert7 分钟前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
海的透彻1 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat1 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
北京中科新远科技1 小时前
高速交换机端口预算怎么做?下行、上联、拆分和冗余计算框架
开发语言·php
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型
后台模板学习2 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one2 小时前
算法--构造
java·数据结构·算法
SL_staff2 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
AI源码2 小时前
基于 Python 的短视频用户行为分析系统
开发语言·python