解析jwt令牌

当服务端生成 token 后发给客户端,客户端在下次向服务端发送请求时需要携带这个token  (这就好像是拿着一张门票一 样),那服务端接到这个token 应该解析出token中的信息(例如用户名),  根据这些信息  查询数据库返回相应的结果。

在 测试类添加一个方法 parserJwt 来解析jwt令牌中信息

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

import java.util.Date;

public class TestJwt {
    public static void main(String[] args) {
        String token=createJwt();
        System.out.println("生成的令牌"+token);
        parserJwt(token);
    }

//    生成jwt令牌(token)
    public static String createJwt(){

//        获取当前事件(毫秒数)
        long now=System.currentTimeMillis();
//        过期事件10s后
        long exp=now+1000*10;


        JwtBuilder builder= Jwts.builder();
        builder.setId("1111")//用户id
                .setSubject("admin") //主题:用户名
               .setIssuedAt(new Date()) //签发事件
              .signWith(SignatureAlgorithm.HS256,"mengxuegu")//签名密钥
             .setExpiration(new Date(exp)); //设置有效期
        return builder.compact();//开始生成jwt令牌
    }

//    解析令牌
    public static void parserJwt(String token){
        Claims claims=Jwts.parser().setSigningKey("mengxuegu").
                parseClaimsJws(token)
                .getBody();
        System.out.println("id:"+claims.getId());
        System.out.println("subject:"+claims.getSubject());
    }
}

如果将 token或签名秘钥篡改一下,会发现运行时就会报错,所以解析token也就是验证 token 


 检测令牌是否过期

测试:先生成一个token ,然后等待10秒后再去解析它

parserJwt("你自己生成的令牌"); //这个方法是自己定义的

10s后:报错 Exception in thread "main" io.jsonwebtoken.ExpiredJwtException: JWT expired at 2022-04-26T11:31:00+0800. Current time: 2022-04-26T11:32:35+0800 

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐