java使用JWT

对JWT的理解:
相关信息可以上JWT官网:
JWT官网
还可以查看JWT里面的一些giuhub上的详细信息:
JWT-GitHub

简单来说
JWT分为三个部分:
1 头部 他的封装格式官网里有,我就直接拿来用了

{
  "alg": "HS256",
  "typ": "JWT"
}

typ是类型,alg是签名算法 (头部信息一般不需要改动,alg会按照签名时的算法的类型而去赋值)
2 有效负荷(也叫有效信息),这个基本上是填写一些基本数据,但是最好不要填写敏感数据,容易泄露,你要填也没事,反正你的锅~

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

里面有一些默认的字段,我们可以用也可以不用,我们也可以额外添加,比如用户名userName等;
3 签名

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
your-256-bit-secret
)

从上面可以看出这个部分是由 头部信息以及有效负荷+密钥(自己设定,最好复杂一点) 的加密 组成,JWT提供了很多加密算法,默认是HMACSHA256,也就是头部信息中的alg为HS256的情况;

引入jar包

		<dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.4.0</version>
        </dependency>

主要代码如下:

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        long systemTime = System.currentTimeMillis() + 1000*60*60;   #获取当前系统时间毫秒数并加一个小时的毫秒数
        String format = simpleDateFormat.format(new Date(systemTime));
        System.out.println("查看时间"+format);
        String token = JWT.create()
                .withExpiresAt(new Date(systemTime))     #设置过期时间
                .withClaim("userName", "xiaoming")   #添加有效负荷数据
                .withClaim("userID", 1)
                .sign(Algorithm.HMAC384("223"));   #设置签名,加入密钥
        System.out.println(token);

解析JWT:

        #认证
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC384("223")).build();  #这里需要注意,这里的验证算法需要和签名时用的一样,并且密钥也需要相同
        #解析
        DecodedJWT decodedJWT = jwtVerifier.verify(token);
        System.out.println(decodedJWT.getClaim("userName")); #获取jwt负载的信息

在这里说一下,认证和解析是两码事,解析是直接将JWT字符串解析出来,获取里面的一些信息;而认证则是需要比对这个数字签名是否是我这里的。
一下代码依然能够执行

        DecodedJWT decode = JWT.decode(token);
        System.out.println(decode.getClaim("userName").asString());

输出结果:
在这里插入图片描述
另外也放一下解析出token令牌里面的一些信息吧
调用 System.out.println(decode.getClaims()); 这个语句,则可以打印tokne里面的有效负荷的信息,结果如下:

{exp=com.auth0.jwt.impl.JsonNodeClaim@223d2c72, userName=com.auth0.jwt.impl.JsonNodeClaim@8f4ea7c, userID=com.auth0.jwt.impl.JsonNodeClaim@436813f3}

还有其他的get函数,慢慢摸索吧~~,建议多看看github和官网里面的内容,特别是github里面有很详细的介绍.
另外关于 web使用JWT的内容,可以在拦截器里面进行拦截验证,这个以后有机会再写

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值