JWT令牌

介绍:jwt是一个开放的行业标准,它定义了一个简洁的,自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任;

官网:

标准:

优点:使用json作为数据传输,有广泛的通用型,并且体积小,便于传输;

          不需要在服务器端保存相关信息;

         jwt载荷部分可以存储业务相关的信息(非敏感的),例如用户信息,角色等;

组成:JWT令牌由Header,Payload,Signature三部分组成,每部分中间使用(.)分隔,比如:xxxx,yyyy,zzzz

第一部分:Header(头),作用:记录令牌类型,签名算法等;比如

{“alg":"HS56",

"type":"JWT"}

将上边的内容使用Base64编码,得到一个字符串就是JWT令牌的第一部分;

第二部分:Payload(有效载荷),作用:携带一些用户信息以及过期时间等;比如

{“id”:“1”‘

“username":"Tom"

}

最后将第二部分负载使用Base64编码,得到一个字符串就是JWT令牌的第二部分

第三部分:Signature(签名),作用:防止Token被篡改,确保安全性;比如:计算出来的签名,是一个字符串

HMACSHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    secret
)

base64UrlEncode(header): jwt令牌的第一部分

base64UrlEncode(payload):jwt的第二部分

secret:签名所使用的密钥;

生成:

1)pom.xml引入jwt的依赖

2)生成IWT代码实现

3)校验

注意事项:JWT校验时使用的签名密钥,必须和生成JWT令牌时使用的密钥是配套的

                 如果JWT令牌解析校验时报错,则说明JWT令牌被篡改或失效了,令牌非法

    @Test
    public void parseJwt(){
        Claims claims = Jwts.parser()
                .setSigningKey("itheima")
                            .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjoxNjU5OTk1NTE3LCJ1c2VybmFtZSI6IlRvbSJ9.EUTfeqPkGslekdKBezcWCe7a7xbcIIwB1MXlIccTMwo")
                .getBody();
        System.out.println(claims);
    }

JWT令牌的介绍,组成,生成,校验等基础知识,我们已经讲解完了;接下来,我们就要来完善之前开发的登录功能;那第一步呢,就需要在登录成功之后,生成JWT令牌并返回给浏览器

步骤:引入JWT工具类

         登录完成之后,调用工具类生成JWT令牌并返回

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值