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

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

相关推荐
程序员黑豆4 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
风流 少年4 小时前
Spring AI 2.0:Memory
java·后端·spring
码匠许师傅5 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
2603_965148115 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
小席是个热心肠5 小时前
AI相关的自我学习
java·人工智能·学习
知无不研7 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
数智化管理手记8 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
cfm_29148 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
鲸采云SRM采购管理系统9 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
C++ 老炮儿的技术栈9 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐