1.JWT简介

JSON Web Token 简称JWT。
一个JWT实际上就是一个字符串,它由三部分组成,头部载荷签名
JWT生成的token是这样的

2.Json Web Token(JWT)生成的Token好处:

  • 安全性比较高,加上密匙加密而且支持多种算法。
  • 携带的信息是自定义的,而且可以做到验证token是否过期。
  • 验证信息可以由前端保存,后端不需要为保存token消耗内存

生成的token,是3段,用.连接。

  1. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJxd2VydHkiLCJpZCI6IjAwNyIsImV4cCI6MTU1OTAzODE0MywiaWF0IjoxNTU5MDM1NzQzLCJhZ2UiOiIyMiIsInVzZXJuYW1lIjoi5rGk5aeGIn0.r4-H9Qmz4IP2OWk-waPjgXkc7j_rsMlyuQaUrtTrNHk

3.Java代码

  1. package com.utils.jwt;
  2.  
  3. import com.auth0.jwt.JWT;
  4. import com.auth0.jwt.algorithms.Algorithm;
  5.  
  6. import java.io.UnsupportedEncodingException;
  7. import java.util.Date;
  8. import java.util.HashMap;
  9. import java.util.Map;
  10.  
  11. public class Test1 {
  12.  
  13. public static final String API_SECRET = "123456";
  14. public static final String API_KEY = "qwerty";
  15.  
  16. public static void main(String[] args) throws UnsupportedEncodingException {
  17. String token = createToken(null);
  18. System.out.println("下面是token");
  19. System.out.println(token);
  20.  
  21. }
  22.  
  23. /**
  24. * @description 创建token
  25. * @author Colo.Zhu
  26. * @time 2018/4/8 14:37
  27. */
  28. public static String createToken(Object object) throws UnsupportedEncodingException {
  29.  
  30. /**
  31. * 头部信息
  32. * 用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。
  33. * 下面的headMap用于存放头部信息
  34. * */
  35. Map<String, Object> headMap = new HashMap(); //头部信息
  36. headMap.put("alg", "HS256");
  37. headMap.put("typ", "JWT");
  38.  
  39. Algorithm algorithm = Algorithm.HMAC256(API_SECRET); //用公共密钥加密
  40.  
  41. long currentTimeMillis = System.currentTimeMillis();
  42. Date issuedAtDate = new Date(currentTimeMillis); //设置签发时间
  43. Date expiresAtDate = new Date(currentTimeMillis + 40 * 60 * 1000); //设置过期时间,大于签发时间
  44.  
  45. /**
  46. * 载荷
  47. * 其实就是自定义的数据,一般存储用户Id,过期时间等信息。
  48. * 也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。
  49. * 而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。
  50. *
  51. */
  52.  
  53. /**
  54. *
  55. * 签名 (sign)
  56. * 签名其实就是:
  57. * 1.头部和载荷各自base64加密后用.连接起来,然后就形成了xxx.xx的前两段token。
  58. * 2.最后一段token的形成是,前两段加入一个密匙用HS256算法或者其他算法加密形成。
  59. * 所以token3段的形成就是在签名处形成的。
  60. */
  61.  
  62. //生成Token:
  63. // eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJxd2VydHkiLCJpZCI6IjAwNyIsImV4cCI6MTU1OTAzODE0MywiaWF0IjoxNTU5MDM1NzQzLCJhZ2UiOiIyMiIsInVzZXJuYW1lIjoi5rGk5aeGIn0.r4-H9Qmz4IP2OWk-waPjgXkc7j_rsMlyuQaUrtTrNHk
  64.  
  65. String token = JWT.create().withHeader(headMap)
  66. .withIssuer(API_KEY)
  67. .withClaim("name", "tom")
  68. .withClaim("age", "22")
  69. .withClaim("id", "007")
  70. .withClaim("username", "汤姆")
  71. .withIssuedAt(issuedAtDate)
  72. .withExpiresAt(expiresAtDate)
  73. .sign(algorithm); //签名
  74.  
  75. return token;
  76. }
  77. }

4..pom.xml

本例主要引入com.auth0.jwt包

  1. <!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
  2. <dependency>
  3. <groupId>com.auth0</groupId>
  4. <artifactId>java-jwt</artifactId>
  5. <version>3.8.0</version>
  6. </dependency>

5.签名

  1. * 签名其实就是:
  2. * 1.头部载荷各自base64加密后用.连接起来,然后就形成了xxx.xx前两段token
  3. * 2.最后一段token的形成是,前两段加入一个密匙用HS256算法或者其他算法加密形成。
  4. * 所以token3段的形成就是在签名处形成的。

参考出处:https://www.jianshu.com/p/75208a68c3b9

JWT生成token的更多相关文章

  1. 国服最强JWT生成Token做登录校验讲解,看完保证你学会!

    转载于:https://blog.csdn.net/u011277123/article/details/78918390 Free码农 2017-12-28 00:08:02 JWT简介 JWT(j ...

  2. 利用jwt生成token,用于http请求身份验证

    前段时间在做移动端接口过程中,考虑到安全性,所有移动端发送请求(除了登录请求)过程中进行token有效验证. 1.利用jwt生成token a.导入jwt相关包 <!-- jwt --> ...

  3. 使用 JWT 生成 Token 代码示例

    JSON Web Token,简称 JWT, 是一个开放的标准(RFC 7519),它定义了以一种紧凑的.自包含的 JSON 对象在各方之间安全传输信息的方式.该信息含有数字签名,可以被验证和信任. ...

  4. Token_使用JWT生成token

    1.token三部分 header   { "typ": "JWT", "alg": "HS256"   } paylo ...

  5. JWT生成token及过期处理方案

    业务场景 在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE.REACTJS等构建)使用token与后端接口交互,以达到安全的目的.本文结合stacko ...

  6. tp5使用jwt生成token,做api的用户认证

    首先 composer 安装  firebase/php-jwt github:https://github.com/firebase/php-jwt composer require firebas ...

  7. .NET6 JWT(生成Token令牌)

    一.Net 6环境下的.net core项目里如何使用JWT. 第一步,在Nuget引入JWT.Microsoft.AspNetCore.Authentication.JwtBearer这两个NuGe ...

  8. JWT生成Token做登录校验

    一.JWT的优点 1.服务端不需要保存传统会话信息,没有跨域传输问题,减小服务器开销. 2.jwt构成简单,占用很少的字节,便于传输. 3.json格式通用,不同语言之间都可以使用. 二.使用JWT进 ...

  9. JSON Web Token (JWT)生成Token及解密实战。

    昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是Java支持的算法中最全的,推荐使用,网址如下. https://githu ...

随机推荐

  1. [02]APUE:POSIX 正则库(#include <regex.h>)

    正则匹配流程: 声明一个 regex_t 类型的变量(结构体) regcomp 函数会将“正则匹配条件”写入此结构体,并编译成特定的二进制格式(加快匹配速度) 声明一个 regmatch_t 类型的变 ...

  2. 火狐不支持webp格式的图片

    <!DOCTYPE html> <html lang="en"> <style> ul{list-style: none;} li{float: ...

  3. 3.2_springBoot2.1.x检索之JestClient操作ElasticSearch

    这里介绍Jest方式交互, 导入jest版本 <!--导入jest--> <dependency> <groupId>io.searchbox</groupI ...

  4. scrapy的使用-LinkExtractor

    背景: 在爬取网站信息是需要获取特定标签下的某些内容,就需要获取这些标签下的链接,如果获取每一个,在通过这个获取它下面的信息,这样效率会很低,时间复杂度O(n^2),但如果先获取链接,再获取内容,则时 ...

  5. JS对象 神奇的Math对象,提供对数据的数学计算。注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法。这是它与Date,String对象的区别

    Math对象 Math对象,提供对数据的数学计算. 使用 Math 的属性和方法,代码如下: <script type="text/javascript"> var m ...

  6. Photoshop基本操作

    PS 工具是我们使用频率比较高的软件之一, 我们学习PS目的不是为了设计海报做电商和UI的,而是要求: 会简单的抠图 会简单的修改PSD效果图 熟练的切图 能和网站美工美眉有共同话题..... Pho ...

  7. MYSQL - database 以及 table 的增删改查

    MYSQL - database 以及 table 的增删改查 MySQL的相关概念介绍 MySQL 为关系型数据库(Relational Database Management System), 这 ...

  8. php算法题---连续子数组的最大和

    php算法题---连续子数组的最大和 一.总结 一句话总结: 重要:一定要本机调试过了再提交代码,因为很容易出现考虑不周的情况,或者修改了之后没有考虑修改的这部分 利用空间来换时间,或者利用空间来换算 ...

  9. 10 行 Python 代码实现模糊查询/智能提示

    10 行 Python 代码实现模糊查询/智能提示   1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的 ...

  10. JS 变量的数据类型转换

    变量的类型转换,一般情况是JS自动转换的,但也有些时候需要手动转换. 1.其它类型转成布尔型 函数和方法的区别 Boolean(a)  //函数是可以独立使用的 document.write(a)   ...