token的创建与解析

token的创建
(1)创建maven工程,引入依赖

<!-- 引入jjwt的依赖-->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.6.0</version>
</dependency>

创建类CreateJwtTest,用于生成token

(2)public class CreateJwt {
    public static void main(String[] args) {
        //Jwts.builder()生成
       //Jwts.parser()验证
       JwtBuilder jwtBuilder =  Jwts.builder()
                .setId("123")
                .setSubject("梦阳")    //用户名
                .setIssuedAt(new Date())//登录时间
                .signWith(SignatureAlgorithm.HS256, "my").setExpiration(new Date(new Date().getTime()+60000))//设置过期时间
         .claim("role","admin"); //自定义属性        
       //前三个为载荷playload 最后一个为头部 header
        System.out.println(jwtBuilder.compact());

    }
}

setIssuedAt用于设置签发时间
signWith用于设置签名秘钥
(3)测试运行,输出如下

eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NjMyODU2MTB9.iKtLy0T5ZzvzS2sjgcs5WyuM7cofmnzxzml7wicrTnA
再次运行,会发现每次运行的结果是不一样的,因为我们的载荷中包含了时间

token的解析
我们刚才已经创建了token,在web应用中这个操作是由服务端进行然后发给客户端,客户端在下次向服务端发送请求时需要携带这个token(这就好像是拿着一张门票一样),那服务端接到这个token应该解析出token中的信息(例如用户id),根据这些信息 查询数据库返回相应的结果。

创建ParseJwtTest

//token的解析
//有状态登录  服务器端保存用户信息
//无状态登录  服务器端没有保存用户信息   无状态效率比有状态效率高
public class PraseJwtTest {
 public static void main(String[] args) {
Claims claims = Jwts.parser()
                .setSigningKey("my")
                .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NjMyODU2MTB9.iKtLy0T5ZzvzS2sjgcs5WyuM7cofmnzxzml7wicrTnA")
 .getBody();
        System.out.println("用户id:"+claims.getId());
        System.out.println("用户名:"+claims.getSubject());
        System.out.println("用户时间:"+new SimpleDateFormat("yyyy-MM-dd 
        HH:mm:ss").format(claims.getIssuedAt()));System.out.println("过期时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getExpiration()));
        System.out.println("用户角色:"+claims.get("role"));
          }
}

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

测试运行,当未过期时可以正常读取,当过期时会引发
io.jsonwebtoken.ExpiredJwtException异常。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值