使用JJWT生成token

JJWT是什么

JJWT 是一个纯 Java 实现,完全基于 JWT、JWS、JWE、JWK 和 JWA RFC 规范,并根据 Apache 2.0 许可证的条款进行开源。

使用JJWT

导入maven依赖

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.5</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.5</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
    <version>0.11.5</version>
    <scope>runtime</scope>
</dependency>

创建和验证JWT

public class JJWTTokenUtil {
    /**
     * token密钥
     * 因为使用的是HS256,所以需要大于32个字节
     */
    private static final String SECRET_KEY=Encoders.BASE64.encode("JHSDKHSDGH7688768HShsdjsHSDKhns8978sds*".getBytes());

    /**
     * 设置过期时间
     */
    private static final Date EXPIRE_DATE=new Date(System.currentTimeMillis()+1000*60*60*24); //1天

    /**
     * 创建Token
     */
    public static String createToken(Map<String,Object> map){
        //规定签名的算法
        SignatureAlgorithm signatureAlgorithm=SignatureAlgorithm.HS256;

        return Jwts.builder()
                .setClaims(map) //负载的数据
                .setExpiration(EXPIRE_DATE) //过期时间
                .signWith(signatureAlgorithm,SECRET_KEY)    //签名
                .compact();  //生成jws
    }

    /**
     * 验证Token
     */
    public static Map<String,Object> verifyToken(String jws){
        try{

            return Jwts.parserBuilder()
                    .setSigningKey(SECRET_KEY)  //响应的密钥
                    .build()
                    .parseClaimsJws(jws).getBody(); //生成Claims主体,其中负载相关的信息

        }catch (JwtException e){
            e.printStackTrace();
            return null;
        }

    }
}

测试

    @Test
    void testToken(){
        Map<String,Object> map=new HashMap<>();
        map.put("name","张三");
        map.put("password","sds3434dfdf34");
        String jws=JJWTTokenUtil.createToken(map);
        System.out.println(jws);

        Map<String, Object> map1 = JJWTTokenUtil.verifyToken(jws);
        System.out.println(map1.get("name"));
        System.out.println(map1.get("password"));
    }

结果:

eyJhbGciOiJIUzI1NiJ9.eyJwYXNzd29yZCI6InNkczM0MzRkZmRmMzQiLCJuYW1lIjoi5byg5LiJIiwiZXhwIjoxNjY2NzA2NDk5fQ.sERrz_mFDv2BTx2GTuBtALbod8Fgq5MzSZm334uK3OY

张三
sds3434dfdf34

参考: https://github.com/jwtk/jjwt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值