当前位置: 首页 > news >正文

JWT令牌封装类/ 接口的各个请求

package org.news.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Date;
import java.util.Map;

// JwtUtil类,用于处理JWT(JSON Web Token)相关的操作
public class JwtUtil {
    // 定义一个私有的静态常量KEY,用于签名和验证JWT,这里设置为"usermessage"
    private static final String KEY = "usermessage";

    // 生成JWT token的方法,接收一个包含业务数据的Map作为参数
    public static String genToken(Map<String, Object> claims) {
        // 使用JWT.create()开始创建一个新的JWT
        // 使用.withClaim("claims", claims)方法将业务数据(claims)存储到JWT中,键为"claims"
        // 使用.withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12))设置JWT的过期时间为当前时间加上12小时(1000毫秒 * 60秒 * 60分钟 * 12小时)
        // 使用.sign(Algorithm.HMAC256(KEY))方法对JWT进行签名,使用HMAC256算法并传入之前定义的KEY
        return JWT.create()
                .withClaim("claims", claims)
                .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12))
                .sign(Algorithm.HMAC256(KEY));
    }

    // 解析JWT token的方法,接收一个token字符串作为参数
    public static Map<String, Object> parseToken(String token) {
        // 使用JWT.require(Algorithm.HMAC256(KEY))指定验证JWT时使用的算法为HMAC256,并传入之前定义的KEY
        // 使用.build()构建验证器
        // 使用.verify(token)方法验证传入的token的有效性
        // 使用.getClaim("claims")获取存储在JWT中的业务数据(键为"claims")
        // 使用.asMap()将获取到的业务数据转换为Map类型并返回
        return JWT.require(Algorithm.HMAC256(KEY))
                .build()
                .verify(token)
                .getClaim("claims")
                .asMap();
    }
}

在 HTTP 协议中,POST、GET、PUT 和 PATCH 是常用的请求方法,它们各自有不同的特点和用途,以下是详细解析:

GET 请求

  • 用途:通常用于从服务器获取资源。例如,获取网页内容、查询数据库中的数据等。
  • 特点
    • 幂等性:多次执行相同的 GET 请求,对服务器资源不会产生副作用,即不会改变服务器上的资源状态,具有幂等性。
    • 安全性:一般被认为是安全的,因为它只用于获取信息,不应该对服务器资源进行修改。
    • 参数传递:参数通过 URL 的查询字符串传递,例如https://example.com/api/users?page=1&limit=10,参数暴露在 URL 中,长度有限制,且不太适合传递敏感信息。
    • 缓存性:GET 请求的结果通常可以被浏览器或中间代理服务器缓存,以提高性能,减少后续相同请求的响应时间。

POST 请求

  • 用途:主要用于向服务器提交数据,以创建新的资源或执行特定的操作。比如,用户注册、登录时提交表单数据,向服务器上传文件等。
  • 特点
    • 非幂等性:多次执行相同的 POST 请求可能会导致不同的结果,因为它通常会在服务器上创建新的资源或对资源进行修改,不具有幂等性。
    • 安全性:相对 GET 请求,POST 请求更适合传递敏感信息,因为数据是在请求体中传递,不会暴露在 URL 中。
    • 参数传递:参数放在请求体中,没有长度限制,可以传递大量的数据,包括文本、二进制数据等。
    • 缓存性:一般情况下,POST 请求的结果不会被缓存,因为每次请求可能会产生不同的结果。

PUT 请求

  • 用途:用于更新服务器上的资源。如果资源不存在,则可以根据具体实现创建新资源,但通常用于完全替换已有的资源。
  • 特点
    • 幂等性:多次执行相同的 PUT 请求,只要请求中的数据相同,对服务器资源的最终状态影响是一致的,具有幂等性。例如,多次使用相同数据更新同一资源,资源的最终状态是相同的。
    • 安全性:与 POST 类似,数据通过请求体传递,相对安全。
    • 参数传递:和 POST 一样,参数放在请求体中,可传递大量数据。
    • 资源更新方式:PUT 请求通常要求客户端提供完整的资源数据,服务器会用请求中的数据完全替换现有资源。

PATCH 请求

  • 用途:也是用于更新资源,但与 PUT 不同的是,它用于对资源进行部分更新,只传递需要修改的部分数据。
  • 特点
    • 非幂等性:虽然 PATCH 请求主要用于更新资源,但由于它只更新部分数据,多次执行可能会因为每次更新的内容不同而导致不同的结果,一般不具有幂等性。
    • 安全性:同样通过请求体传递数据,较为安全。
    • 参数传递:参数在请求体中,传递的是需要更新的部分数据,而不是整个资源数据,更加灵活和高效。
    • 资源更新方式:PATCH 请求允许客户端只发送要修改的字段及其新值,服务器根据这些信息对资源进行部分更新,而不是像 PUT 那样完全替换。

在实际使用中,应根据具体的业务需求选择合适的请求方法,以确保数据的正确传输和资源的有效管理。同时,服务器端也需要根据不同的请求方法,正确地处理请求并返回相应的响应。

相关文章:

  • 黑马跟学.苍穹外卖.Day08
  • 【资料分享】全志科技T113-i全国产(1.2GHz双核A7 RISC-V)工业核心板规格书
  • tf1.x和tf2.x在使用上的区别和联系是什么
  • AI 原生 IDE Trae 深度体验:SSHremote 功能助力远程开发与云原生部署
  • 基于web的牙医预约管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • k8s资源管理介绍
  • 【C++指南】内存管理完全手册:new/delete
  • 修改windows npt时钟服务器
  • 工业 CPE(Customer Premises Equipment,客户终端设备)
  • 深度学习定义与分类【详细易懂 初学者友好~】
  • pgvector 向量数据库的安装方式全集
  • 【FPGA】状态机模板-分别对比一段式状态机、二段式状态机以及三段式状态机
  • 操作系统知识点32
  • MySQL事务详解:从理论到实践,保障数据一致性
  • 分区表和分表
  • 不可不知的分布式数据库-TiDB
  • TypeScript中的类型断言(type assertion),如何使用类型断言进行类型转换?
  • Kubernetes的Service详解
  • 【动态规划】--- 路径问题
  • 监控视频联网平台在智慧水利中的应用
  • 特朗普与泽连斯基通话
  • 特朗普与普京开始电话会谈,稍后将致电泽连斯基
  • 体坛联播|雷霆抢七淘汰掘金,国米错失意甲登顶良机
  • 贞丰古城:新垣旧梦间的商脉与烟火
  • 多个“首次”!上市公司重大资产重组新规落地
  • 2025财政观察|长三角“三公”经费普降,钱要用在刀刃上