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 那样完全替换。

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

相关推荐
哈__7 分钟前
从 MySQL 到在线表格:NocoDB 自托管部署、数据导入与远程访问
数据库·mysql
倔强的石头1061 小时前
高可用与无感扩容——分布式时序数据库选型指南
数据库·分布式·时序数据库
袋鼠云数栈9 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛1392462567310 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛1392462567310 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
倔强的石头_12 小时前
事务边界与批量写入:避免长事务、锁等待和日志压力
数据库
努力努力再努力wz12 小时前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
坐吃山猪13 小时前
【多线程】Lock与Condition
大数据·数据库
Lightpwd13 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
数据库·后端
LabVIEW开发14 小时前
LabVIEW 64位安装的位深陷阱:工具包、内存与工程兼容
数据库·labview·labview知识·labview功能·labview程序