首页 > 其他分享 >JWT入门学习

JWT入门学习

时间:2023-06-04 22:23:06浏览次数:42  
标签:入门 userMap JWT jwt System 学习 token id

jwt概述
JSON Web token简称JWT,是用于对应程序上的用户进行身份验证的标记,也就是说,使用JWT的应用程序不再需要保存与其有关的用户cookie或者session数据。此特性便于可伸缩性,同时保证应用程序的安全。

jwt内部结构

  1. jwt就是一个字符串,经过加密处理与校验处理的字符串,形式为:A.B.C
  2. A由jwt头部信息header加密得到
  3. B由jwt用到的身份验证信息json数据加密得到
  4. C由A和B加密得到,是校验部分

jwt鉴权流程

jwt入门案例
使用JWT工具,生成token,并将用户id和手机号码写入token中。

点击查看代码
@Test
    public void createToken(){
        //构建基础数据
        Map<String, Object> userMap = new HashMap<>();
        userMap.put("id",1);
        userMap.put("phone","18312345678");
        long now = System.currentTimeMillis();
        //使用jwt工具类,生成token
        String token = Jwts.builder().addClaims(userMap)//设置数据
                //设置加密算法,添加密钥为:wzh666
                .signWith(SignatureAlgorithm.HS256, "wzh666")
                //设置过期时间
                .setExpiration(new Date(now + 5000))
                .compact();
        System.out.println(token);
    }

解析token

点击查看代码
@Test
    public void parseToken(){
        try {
            String token="eyJhbGciOiJIUzI1NiJ9.1yJwaG9uZSI6IjE4MzEyMzQ1Njc4IiwiaWQiOjEsImV4cCI6MTY4NTg4ODI3N30.UK8NALoiCCXsAbMIyWTuoEKgJX9r5SWuWZNhXBbKNts";
            Claims claims = Jwts.parser()
                    .setSigningKey("wzh666")
                    .parseClaimsJws(token)
                    .getBody();
            Object id = claims.get("id");
            Object phone = claims.get("phone");
            System.out.println(id+"---"+phone);
        }catch (ExpiredJwtException e){
            System.err.println("token已过期");
        }catch (SignatureException e){
            System.out.println("token不合法");
        }
    }

token常见的两种异常
ExpiredJwtException:token过期
SignatureException:token不合法

标签:入门,userMap,JWT,jwt,System,学习,token,id
From: https://www.cnblogs.com/wzh-Official/p/17456517.html

相关文章

  • Vue3 模板语法学习
    <template> {{message}} {{number+1}} {{ok?'yes':'no'}}</template><script> exportdefault{   data(){      return{         message:'aaa',         number:10,         ok:false      }   } }&l......
  • 第十五周学习总结
    这一周是我们软件工程这门课理论课的最后一周,第十六周进行了Java的最后一次的个人成绩考核,老师在课上部署了我们记下来的软件测试阶段的任务,下面是我这一周的学习总结。学科学习方面:完成了python的大作业,运用python进行简单的图形化的界面设计,以及python对数据库的连接;运用matlab......
  • 【安全学习之路】Day18
    ......
  • Android学习
    2023-06-04;1.MainActivity.kt;packagecom.example.greetingcardimportandroid.os.Bundleimportandroidx.activity.ComponentActivityimportandroidx.activity.compose.setContentimportandroidx.compose.foundation.layout.fillMaxSizeimportandroidx.compose......
  • linux 性能自我学习 ———— 关于内存 [七]
    前言内存的基本知识,将在操作系统篇中详细介绍,这里只说明如何排查问题。正文内存的分配和回收:在malloc是c标准库中的内存分配函数,对应到系统调用上,有两种实现方式,一种是brk()和mmap()对于小块内存,小于128k使用brk来分配,也就是通过移动堆栈的位置来分配内存。这些内存释放......
  • netty入门demo
    参考博客:(14条消息)【Netty整理01-快速入门】Netty简单使用Demo(已验证)_the_fool_的博客-CSDN博客ServerHandler.javapackagecom.hmb;importio.netty.buffer.ByteBuf;importio.netty.channel.ChannelHandlerContext;importio.netty.channel.ChannelInboundHandlerAdapt......
  • SSM学习第四天
    SSM学习第四天今日内容理解SpringMVC相关概念完成SpringMVC的入门案例学会使用PostMan工具发送请求和数据掌握SpringMVC如何接收请求、数据和响应结果掌握RESTful风格及其使用完成基于RESTful的案例编写SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对......
  • SSM学习第五天
    SSM学习第五天今日内容完成SSM的整合开发能够理解并实现统一结果封装与统一异常处理能够完成前后台功能整合开发掌握拦截器的编写1,SSM整合前面我们已经把Mybatis、Spring和SpringMVC三个框架进行了学习,今天主要的内容就是把这三个框架整合在一起完成我们的业务功能开发......
  • 第十六周学习总结
    本周是这学期的第16周,课程也都已经结束,许多课程也迎来了结课和考试,我也完成了所有的报告、以及作业,开始了考试的复习。复盘了一下我这一周的学习内容以及接下来一段时间的安排1.学科知识方面,复习了数据库以及工程数学的相关知识,并通过了数据库的期末考试,结果未知。2.技能方面,在......
  • 「学习笔记」线段树
    介绍:线段树是一棵二叉搜索树,思想与分治很想,把一段区间平分平分再平分,平分到不能平分为止,可以进行方便的区间修改和区间查询,当然,树状数组能做的单点修改、单点查询,线段树也可以更好地实现,总之,线段树是树状数组的升级版,此外,线段树能做的平衡树也能做,但平衡树码量太大,考场上一般写......