使用 io.jsonwebtoken 实现token的生成与解码

本文介绍了如何在Java中使用jjwt库来生成和解析JSON Web Token(JWT)。首先,导入jjwt依赖,然后展示了生成JWT的代码,包括设置自定义 claims。接着,演示了解析JWT并获取claims内容的过程。最后,提供了一个简单的JWT工具类,用于封装JWT的创建和解析功能。

通过 jsonwebtoken 能够方便的生成token和进行token相关解码,参考文档:https://github.com/jwtk/jjwt#base64 ,详细的操作流程如下所示

导入io.jsonwebtoken依赖:

<dependency>
  <groupId>io.jsonwebtoken</groupId>
  <artifactId>jjwt</artifactId>
  <version>0.9.1</version>
</dependency>

jwt的简单使用:

生成token

@Test
public void testIoJsonWebToken() {
  String key = "myKey";
  HashMap<String, Object> map = new HashMap<>();
  map.put("name", "get");
  String jwt = Jwts.builder()
    .signWith(SignatureAlgorithm.HS256, key)
    .setClaims(map)
    .compact();
  System.out.println(jwt); // eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiZ2V0In0.RiKlMMNgv3XRDcZtxgukAEpOHv_Q9pQQjDPPuPa-Dw0
}

解析token,对生成的token进行解密操作

@Test
public void parseJsonWebToken() {
  String key = "myKey";
  Jws<Claims> jws = Jwts.parser()
    .setSigningKey(key)
 .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiZ2V0In0.RiKlMMNgv3XRDcZtxgukAEpOHv_Q9pQQjDPPuPa-Dw0");
  System.out.println(jws.getBody());
  System.out.println(jws.getBody().get("name"));
}

封装jwt工具类

实体类:

public class User implements Serializable {
    private String name;
    private Integer age;
    private String password;

    public User(String name, Integer age, String password) {
        this.name = name;
        this.age = age;
        this.password = password;
    }
    // get set 方法
}

工具类:

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class JwtHelper {
    private static final String key = "keyxxx";

    public static String createJWT(Object obj) {
        Map<String, Object> map = new HashMap<>();
        Field[] fields = obj.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            try {
                map.put(field.getName(), field.get(obj));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, key)
                .setClaims(map)
                .compact();
    }

    public static Claims parseJWT(String token) {
        return Jwts.parser()
                .setSigningKey(key)
                .parseClaimsJws(token)
                .getBody();
    }
}
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值