栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JWT简单介绍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JWT简单介绍

一、什么是 JWT?

Json web token (JWT),是用于对应用程序上的用户进行身份验证的标记,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。也就是说, 使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据。此特性便于可伸缩性, 同时保证应用程序的安全。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

二、流程
  • 用户使用用户名密码来请求服务器
  • 服务器进行验证用户的信息
  • 服务器通过验证发送给用户一个token
  • 客户端存储token,并在每次请求时附送上这个token值
  • 服务端验证token值,并返回数据
三、格式

JWT是由三段信息构成的,将这三段信息文本用.连接一起就构成了Jwt字符串。官网:https://jwt.io。

HEADER:由JWT头部信息header加密得到

PAYLOAD:由JWT用到的身份验证信息json数据加密得到

SIGNATURE:由HEADER和PAYLOAD加密得到,是校验部分

 四、示例 

导入依赖:


   io.jsonwebtoken
   jjwt
   0.9.1

编写测试用例:

        1、生成 token

    @Test
    public void generJwtTest(){
        //1.先定义数据
        HashMap map = new HashMap();
        map.put("userId",String.valueOf(1));
        map.put("phone","13647628330");
        map.put("name","张三");
        long now = System.currentTimeMillis();
        //2.创建生成jwt--三部分,使用JWT的工具类生成token
        String token = Jwts.builder()
                //2.1 jwt 的 header 部分的加密算法 和 第三部分 自定义的 字符串
                .signWith(SignatureAlgorithm.HS256,"tanqi")
                //2.2 写入数据
                .setClaims(map)
                //2.3 失效时间
                .setExpiration(new Date(now + 300000))
                .compact();
        System.out.println(token);
    }

测试结果: 

eyJhbGciOiJIUzI1NiJ9.eyJwaG9uZSI6IjEzNjQ3NjI4MzMwIiwibmFtZSI6IuW8oOS4iSIsImV4cCI6MTY1ODgzMzQwNiwidXNlcklkIjoiMSJ9.50wgzoY3DKw1UCDJwofoVbzvXjAophGlpWjQRQNxsi4

        2、解析token

    @Test
    public void parseJwtTest(){
        String token = "eyJhbGciOiJIUzI1NiJ9.eyJwaG9uZSI6IjEzNjQ3NjI4MzMwIiwibmFtZSI6IuW8oOS4iSIsImV4cCI6MTY1ODgzMzQwNiwidXNlcklkIjoiMSJ9.50wgzoY3DKw1UCDJwofoVbzvXjAophGlpWjQRQNxsi4";
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey("tanqi")
                    .parseClaimsJws(token)
                    .getBody();
            //获取解析后的数据并打印
            String userId = (String) claims.get("userId");
            String phone = (String) claims.get("phone");
            String name = (String) claims.get("name");
            System.out.println(userId);
            System.out.println(name);
            System.out.println(phone);
        }catch (ExpiredJwtException e){
            System.out.println("token已过期");
        }catch (SignatureException e){
            System.out.println("token不合法");
        }
    }

测试结果:

1
张三
13647628330

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号