设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间20 现在时间20 缓存数据 和聪明人交流,和靠谱的人恋爱,和进取的人共事,和幽默的人随行。晚安!

和聪明人交流,和靠谱的人恋爱,和进取的人共事,和幽默的人随行。晚安!

查看: 276|回复: 1

java解析jwt中的payload的用法

[复制链接]

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:19
  • 最近打卡:2024-04-03 04:13:10
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
32
主题
22
精华
0
金钱
106
积分
56
注册时间
2023-9-29
最后登录
2025-5-31

发表于 2025-5-31 05:51:54 | 显示全部楼层 |阅读模式

java解析jwt中的payload

在 Java 中解析 JWT(JSON Web Token)中的 Payload 部分,通常需要使用一些库来简化操作。

以下是几种常见的方法:

1. 使用 jjwt 库

  1. jjwt
复制代码
是一个流行的开源库,专门用于处理 JWT。你可以通过以下步骤解析 JWT 的 Payload。

步骤 1:添加依赖

  1. pom.xml
复制代码
文件中添加
  1. jjwt
复制代码
依赖:

  1. <dependency>
  2. <groupId>io.jsonwebtoken</groupId>
  3. <artifactId>jjwt-api</artifactId>
  4. <version>0.9.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>io.jsonwebtoken</groupId>
  8. <artifactId>jjwt-impl</artifactId>
  9. <version>0.9.1</version>
  10. </dependency>
复制代码

步骤 2:解析 JWT

使用

  1. Jwts.parser()
复制代码
方法来解析 JWT。

以下是一个示例代码:

  1. import io.jsonwebtoken.Claims;
  2. import io.jsonwebtoken.Jwts;
  3. public class JwtParser {
  4. public static void main(String[] args) {
  5. String jwtToken = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY2Nzg5MCIsImFkbWluIjp0cnVlLCJleHAiOjE2MDAwMDAezCuBf3DqQ";
  6. String secretKey = "your-secret-key"; // 用于签名验证的密钥
  7. try {
  8. Claims claims = Jwts.parser()
  9. .setSigningKey(secretKey) // 设置签名密钥
  10. .parseClaimsJws(jwtToken)
  11. .getBody();
  12. System.out.println("Subject: " + claims.getSubject());
  13. System.out.println("Admin: " + claims.getBoolean("admin"));
  14. System.out.println("Expiration: " + claims.getExpiration());
  15. } catch (Exception e) {
  16. System.out.println("Invalid JWT token");
  17. e.printStackTrace();
  18. }
  19. }
  20. }
复制代码

说明:

    1. Claims
    复制代码
    对象表示 JWT 的 Payload 部分,它是一个包含声明的 Map。
    1. parseClaimsJws()
    复制代码
    方法会验证签名并解析 JWT。

2. 使用 Nimbus jose-jwt 库

  1. Nimbus jose-jwt
复制代码
是另一个常用的库,支持 JWT 的生成和解析。

步骤 1:添加依赖

  1. pom.xml
复制代码
文件中添加以下依赖:

  1. <dependency>
  2. <groupId>com.nimbusds</groupId>
  3. <artifactId>nimbus-jose-jwt</artifactId>
  4. <version>9.24.2</version>
  5. </dependency>
复制代码

步骤 2:解析 JWT

以下是使用

  1. nimbus-jose-jwt
复制代码
解析 JWT 的示例代码:

  1. import com.nimbusds.jose.JOSEException;
  2. import com.nimbusds.jwt.JWTClaimsSet;
  3. import com.nimbusds.jwt.SignedJWT;
  4. public class JwtParser {
  5. public static void main(String[] args) {
  6. String jwtToken = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY2Nzg5MCIsImFkbWluIjp0cnVlLCJleHAiOjE2MDAwMDAezCuBf3DqQ";
  7. String secretKey = "your-secret-key"; // 用于签名验证的密钥
  8. try {
  9. SignedJWT signedJWT = SignedJWT.parse(jwtToken);
  10. JWTClaimsSet claimsSet = signedJWT.getJWTClaimsSet();
  11. System.out.println("Subject: " + claimsSet.getSubject());
  12. System.out.println("Admin: " + claimsSet.getBooleanClaim("admin"));
  13. System.out.println("Expiration: " + claimsSet.getExpiryTime());
  14. } catch (JOSEException e) {
  15. System.out.println("Invalid JWT token");
  16. e.printStackTrace();
  17. }
  18. }
  19. }
复制代码

说明:

    1. SignedJWT.parse()
    复制代码
    方法用于解析 JWT。
    1. getJWTClaimsSet()
    复制代码
    方法返回 Payload 部分的内容。

3. 手动解析(不推荐)

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

以下是示例代码:

  1. import java.util.Base64;
  2. public class JwtParser {
  3. public static void main(String[] args) {
  4. String jwtToken = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY2Nzg5MCIsImFkbWluIjp0cnVlLCJleHAiOjE2MDAwMDAezCuBf3DqQ";
  5. String[] parts = jwtToken.split("\\.");
  6. String payloadBase64 = parts[1];
  7. // 解码 Base64
  8. byte[] decodedBytes = Base64.getDecoder().decode(payloadBase64);
  9. String payload = new String(decodedBytes);
  10. System.out.println("Payload: " + payload);
  11. }
  12. }
复制代码

说明:

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

注意事项:

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
19
积分
18
注册时间
2022-12-28
最后登录
2022-12-28

发表于 2025-11-16 11:05:02 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表