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

但是这样进行校验太麻烦了
使用Spring Validation,对注册接口的参数进行合法性校验
1.引入Spring Validation起步依赖
-
在参数前面添加@Pattern 注解
-
在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容器,为啥,因为我们要让我们的系统知道我们开发了一个拦截器,
我们需要把我们弄了拦截器放入拦截器中,但是我们发现我们拦截的是一些除了登录以外需要进行令牌校验的,但是很显然,我们登录和注册的是时候不需要令牌,那么我就需要取消这些请求的拦截