java解析jwt中的payload的用法

2025-05-14 09:19:12 128
魁首哥

java解析jwt中的payload

在 java 中解析 jwt(json web token)中的 payload 部分,通常需要使用一些库来简化操作。

以下是几种常见的方法:

1. 使用 jjwt 库

jjwt 是一个流行的开源库,专门用于处理 jwt。你可以通过以下步骤解析 jwt 的 payload。

步骤 1:添加依赖

pom.xml 文件中添加 jjwt 依赖:


    io.jsonwebtoken
    jjwt-api
    0.9.1


    io.jsonwebtoken
    jjwt-impl
    0.9.1

步骤 2:解析 jwt

使用 jwts.parser() 方法来解析 jwt。

以下是一个示例代码:

import io.jsonwebtoken.claims;
import io.jsonwebtoken.jwts;

public class jwtparser {
    public static void main(string[] args) {
        string jwttoken = "eyjhbgcioijiuzi1nij9.eyjzdwiioiixmjm0nty2nzg5mcisimfkbwluijp0cnvllcjlehaioje2mdawmdaezcubf3dqq";
        string secretkey = "your-secret-key"; // 用于签名验证的密钥

        try {
            claims claims = jwts.parser()
                    .setsigningkey(secretkey) // 设置签名密钥
                    .parseclaimsjws(jwttoken)
                    .getbody();

            system.out.println("subject: " + claims.getsubject());
            system.out.println("admin: " + claims.getboolean("admin"));
            system.out.println("expiration: " + claims.getexpiration());

        } catch (exception e) {
            system.out.println("invalid jwt token");
            e.printstacktrace();
        }
    }
}

说明:

  • claims 对象表示 jwt 的 payload 部分,它是一个包含声明的 map。
  • parseclaimsjws() 方法会验证签名并解析 jwt。

2. 使用 nimbus jose-jwt 库

nimbus jose-jwt 是另一个常用的库,支持 jwt 的生成和解析。

步骤 1:添加依赖

pom.xml 文件中添加以下依赖:


    com.nimbusds
    nimbus-jose-jwt
    9.24.2

步骤 2:解析 jwt

以下是使用 nimbus-jose-jwt 解析 jwt 的示例代码:

import com.nimbusds.jose.joseexception;
import com.nimbusds.jwt.jwtclaimsset;
import com.nimbusds.jwt.signedjwt;

public class jwtparser {
    public static void main(string[] args) {
        string jwttoken = "eyjhbgcioijiuzi1nij9.eyjzdwiioiixmjm0nty2nzg5mcisimfkbwluijp0cnvllcjlehaioje2mdawmdaezcubf3dqq";
        string secretkey = "your-secret-key"; // 用于签名验证的密钥

        try {
            signedjwt signedjwt = signedjwt.parse(jwttoken);
            jwtclaimsset claimsset = signedjwt.getjwtclaimsset();

            system.out.println("subject: " + claimsset.getsubject());
            system.out.println("admin: " + claimsset.getbooleanclaim("admin"));
            system.out.println("expiration: " + claimsset.getexpirytime());

        } catch (joseexception e) {
            system.out.println("invalid jwt token");
            e.printstacktrace();
        }
    }
}

说明:

  • signedjwt.parse() 方法用于解析 jwt。
  • getjwtclaimsset() 方法返回 payload 部分的内容。

3. 手动解析(不推荐)

虽然可以手动解析 jwt,但这种方式需要处理 base64 编码和签名验证,强烈不推荐

以下是示例代码:

import java.util.base64;

public class jwtparser {
    public static void main(string[] args) {
        string jwttoken = "eyjhbgcioijiuzi1nij9.eyjzdwiioiixmjm0nty2nzg5mcisimfkbwluijp0cnvllcjlehaioje2mdawmdaezcubf3dqq";
        string[] parts = jwttoken.split("\\.");
        string payloadbase64 = parts[1];

        // 解码 base64
        byte[] decodedbytes = base64.getdecoder().decode(payloadbase64);
        string payload = new string(decodedbytes);

        system.out.println("payload: " + payload);
    }
}

说明:

  • 这种方法只是解码 payload,不验证签名
  • 仅用于测试或学习目的。

注意事项:

  1. 密钥管理:解析 jwt 时需要提供签名密钥(secretkey),这是为了验证 jwt 的真实性。
  2. 异常处理:在实际项目中,需要对解析过程中可能发生的异常进行处理。
  3. 安全问题:不要将密钥硬编码到代码中。可以将其存储在配置文件或环境变量中。

通过以上方法,你可以在 java 中轻松解析 jwt 的 payload 部分并提取所需的声明信息。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

分享
海报
128
上一篇:Spring Security+JWT如何实现前后端分离权限控制 下一篇:springboot项目如何开启https服务

忘记密码?

图形验证码