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

java 复制代码
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 那样完全替换。

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

相关推荐
HyperAI超神经26 分钟前
【vLLM 学习】Aqlm 示例
java·开发语言·数据库·人工智能·学习·教程·vllm
理想奋斗中1 小时前
MYDB仿MySQL手写数据库项目总结
数据库·mysql·mydb·仿mysql
~在杰难逃~1 小时前
DB-Day10笔记-数据库事务问题补充&Python与MySQL的交互
数据库·笔记·python
小鱼学习笔记1 小时前
4.17---实现商铺和缓存与数据库双写一致以及宕机处理
数据库·缓存
{⌐■_■}2 小时前
【go】什么是Go语言中的GC,作用是什么?调优,sync.Pool优化,逃逸分析演示
java·开发语言·javascript·jvm·数据库·后端·golang
Blossom.1183 小时前
量子计算在金融领域的应用与展望
数据库·人工智能·分布式·金融·架构·量子计算·ai集成
Cachel wood3 小时前
Mysql相关知识2:Mysql隔离级别、MVCC、锁
数据库·python·sql·mysql·中间件·数据分析·django
Hello World呀3 小时前
oracle查询当前用户所有字段和表
数据库·oracle
ssauuuuuu3 小时前
Oracle高级语法篇-merge into语句
数据库·oracle
一只鹿鹿鹿3 小时前
【测试文档】项目测试文档,测试管理规程,测试计划,测试文档模版,软件测试报告书(Word)
数据库·后端·spring·单元测试