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

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

相关推荐
exe4522 分钟前
jdbc查询mysql数据库时,出现id顺序错误的情况
数据库·mysql
John Song8 分钟前
macOS 上使用 Homebrew 安装redis-cli
数据库·redis·macos
数据知道16 分钟前
Mac电脑上本地安装 redis并配置开启自启完整流程
数据库·redis·macos
Lonely丶墨轩17 分钟前
Redis 缓存策略:借助缓存优化数据库性能并保障数据一致性
数据库·redis·缓存
GUIQU.21 分钟前
【Oracle】分区表
数据库·oracle
Wooden-Flute25 分钟前
五、查询处理和查询优化
服务器·数据库·oracle
曹牧26 分钟前
Delphi中实现批量插入数据
数据库·oracle
卷积殉铁子37 分钟前
SQL注入之联合查询注入
数据库
小屁孩大帅-杨一凡2 小时前
在 Oracle 中,创建不同类型索引的 SQL 语法
数据库·sql·oracle
西柚小萌新2 小时前
【大模型:知识图谱】--5.neo4j数据库管理(cypher语法2)
数据库·知识图谱·neo4j