JWT进行请求头校验

3552 篇文章 115 订阅

JWT请求头校验

这里进行请求头校验,我们首先要添加过滤器JwtAuthenticationFilter,到SpringSecurity默认提供的过滤器链中。

为什么要添加过滤器?

是为了在请求到达控制器之前进行身份验证和授权处理Spring Security默认提供的过滤器链是一组预定义的过滤器,用于处理各种安全相关的任务,比如身份验证、授权、会话管理等。这些过滤器按照特定的顺序被调用,以确保请求的安全性。将JwtAuthenticationFilter加入到过滤器链中,可以使请求在进入控制器之前经过自定义的身份验证和授权逻辑。这样可以保护你的API免受未经身份验证或未授权的访问,确保只有合法的用户才能访问受保护的资源。

创建过滤器

创建filter包,在包下创建JwtAuthenticationFilter

image-20230809174653257

这里就是先获取请求头内令牌的内容,再调用工具类的方法对令牌进行解析,方法内部校验令牌的合法与解析,将jwt令牌转化成UserDetails类型,用于往UsernamePasswordAuthenticationToken类中包装用户基本信息,再封装来自请求的详细身份验证信息,例如 IP 地址、会话 ID 等;最后,将认证对象设置到当前的安全上下文中,这样就代表验证完成了。再调下一个用过滤器方法。

image-20230809174831627

image-20230809174850394

image-20230809175827386

这里toUser中密码随便写的原因是,我们不用password,在UsernamePasswordAuthenticationToken第二个参数是凭证,就是密码之类的,我们不需要,所以传null。

image-20230809180316413

添加过滤器

回到SecurityConfiguration配置类,我们将他引入,并将其添加在验证用户名密码的过滤器之前

image-20230809181004864

测试

创建TestController,进行简单测试

image-20230809181326473

登录获取token

image-20230809181237355

image-20230809181749313

测试成功,不要忘了加Bearer 哦。

我们不输入值,发现不是json格式的,我们进行完善

image-20230809181855906

完善

回到SecurityConfiguration配置类,添加配置,conf.accessDeniedHandler(this::accessDenied);是登录进去,但没有权限访问一些页面的处理器,其他没有什么要注意的,也可以把这些处理器写成一个,那样就清爽多了,但我懒,代码就不贴了。

image-20230809183359070

image-20230809183414470

在RestBean中又封装俩方法

image-20230809183436923

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校验请求头中携带的JWT (JSON Web Token),您需要进行以下步骤: 1. 获取请求头中的JWT:从请求头中获取 JWT 字符串,通常在 "Authorization" 字段中。 2. 解析JWT:使用 JWT 库(如 `jsonwebtoken`)来解析 JWT。解析过程会验证 JWT 的签名和有效期,并将 JWT 的负载(包含用户信息或其他数据)提取出来。 3. 验证签名:通过验证 JWT 的签名,确保它是由服务器签发的,并且未被篡改。您需要使用 JWT 库提供的密钥来验证签名。 4. 验证有效期:检查 JWT 的有效期是否过期。验证过程通常会比较当前时间与 JWT 的 "exp" (expiration time) 声明的时间戳。 5. 校验其他信息:根据您的需求,可以校验其他的声明信息,如 "aud" (audience)、"iss" (issuer) 等。 以下是一个简单的示例代码(使用 Node.js 和 `jsonwebtoken` 库)来实现上述步骤: ```javascript const jwt = require('jsonwebtoken'); function verifyJWT(token, secretKey) { try { // 解析 JWT const decoded = jwt.verify(token, secretKey); // 检查有效期 if (decoded.exp < Date.now() / 1000) { throw new Error('JWT has expired'); } // 返回解析后的负载 return decoded; } catch (error) { // 校验失败 console.error('Invalid JWT:', error.message); return null; } } // 使用示例 const token = 'your.jwt.token'; // 从请求头中获取的 JWT const secretKey = 'your-secret-key'; // 用于验证签名的密钥 const payload = verifyJWT(token, secretKey); if (payload) { // JWT 校验成功,可以在这里使用负载数据 console.log('User ID:', payload.userId); } ``` 请注意,以上代码仅为示例,您需要根据您的实际情况进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值