身份认证2_解析jwt令牌and检测令牌是否过期

解析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 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值