1.JWT简介

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

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

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

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

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJxd2VydHkiLCJpZCI6IjAwNyIsImV4cCI6MTU1OTAzODE0MywiaWF0IjoxNTU5MDM1NzQzLCJhZ2UiOiIyMiIsInVzZXJuYW1lIjoi5rGk5aeGIn0.r4-H9Qmz4IP2OWk-waPjgXkc7j_rsMlyuQaUrtTrNHk

3.Java代码

package com.utils.jwt;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm; import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; public class Test1 { public static final String API_SECRET = "123456";
public static final String API_KEY = "qwerty"; public static void main(String[] args) throws UnsupportedEncodingException {
String token = createToken(null);
System.out.println("下面是token");
System.out.println(token); } /**
* @description 创建token
* @author Colo.Zhu
* @time 2018/4/8 14:37
*/
public static String createToken(Object object) throws UnsupportedEncodingException { /**
* 头部信息
* 用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。
* 下面的headMap用于存放头部信息
* */
Map<String, Object> headMap = new HashMap(); //头部信息
headMap.put("alg", "HS256");
headMap.put("typ", "JWT"); Algorithm algorithm = Algorithm.HMAC256(API_SECRET); //用公共密钥加密 long currentTimeMillis = System.currentTimeMillis();
Date issuedAtDate = new Date(currentTimeMillis); //设置签发时间
Date expiresAtDate = new Date(currentTimeMillis + 40 * 60 * 1000); //设置过期时间,大于签发时间 /**
* 载荷
* 其实就是自定义的数据,一般存储用户Id,过期时间等信息。
* 也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。
* 而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。
*
*/ /**
*
* 签名 (sign)
* 签名其实就是:
* 1.头部和载荷各自base64加密后用.连接起来,然后就形成了xxx.xx的前两段token。
* 2.最后一段token的形成是,前两段加入一个密匙用HS256算法或者其他算法加密形成。
* 所以token3段的形成就是在签名处形成的。
*/ //生成Token:
// eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJxd2VydHkiLCJpZCI6IjAwNyIsImV4cCI6MTU1OTAzODE0MywiaWF0IjoxNTU5MDM1NzQzLCJhZ2UiOiIyMiIsInVzZXJuYW1lIjoi5rGk5aeGIn0.r4-H9Qmz4IP2OWk-waPjgXkc7j_rsMlyuQaUrtTrNHk String token = JWT.create().withHeader(headMap)
.withIssuer(API_KEY)
.withClaim("name", "tom")
.withClaim("age", "22")
.withClaim("id", "007")
.withClaim("username", "汤姆")
.withIssuedAt(issuedAtDate)
.withExpiresAt(expiresAtDate)
.sign(algorithm); //签名 return token;
}
}

4..pom.xml

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

<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.8.0</version>
</dependency>

5.签名

 * 签名其实就是:
* 1.头部载荷各自base64加密后用.连接起来,然后就形成了xxx.xx的前两段token。
* 2.最后一段token的形成是,前两段加入一个密匙用HS256算法或者其他算法加密形成。
* 所以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. flutter layout-child

    一.Container 二.Padding 三.Center 四.Align 五.FittedBox 六.AspectRatio 七.ConstrainedBox 八.Baseline 九.Fract ...

  2. sql 递归显示所有父节点

    1.我先建两个表 一个表示项目及级别 另一个表示项目最后一级中包含内容.两个表的数据如图 CREATE TABLE [dbo].[yq_Project]( ,) primary key, ) NOT ...

  3. python学习5—一些关于基本数据结构的练习题

    python学习5—一些关于基本数据结构的练习题 # 1. use _ to connect entries in a list # if there are no numbers in list l ...

  4. 【2018ACM/ICPC网络赛】徐州赛区

    呃.自闭了自闭了.我才不会说我写D写到昏天黑地呢. I  Characters with Hash 题目链接:https://nanti.jisuanke.com/t/31461 题意:给你一个字符串 ...

  5. LightOJ 1245 - Harmonic Number (II)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1245 题意:仿照上面那题他想求这么个公式的数.但是递归太慢啦.让你找公式咯. ...

  6. 006-Java的break和continue

    break 和 continue关键字的使用 break: 结束当前循环 continue:结束当次循环 示例如下 class JavaTest{ public static void main(St ...

  7. linux 系统优化,调优

    1.系统安装前的规则 a.分区:不同环境不同分法,按自己的需求来 以硬盘500G为例 /boot 100M-200M(只存放grub和启动相关文件,不存放其他) /  80G-100G (因为很多人默 ...

  8. innodb_file_per_table 理解

    MYSQL innodb存储引擎 默认将所有的数据库 innodb 引擎的表数据存储在一个共享空间中:ibdata1,当增删数据库的时候, ibdata1文件不会自动收缩,单个数据库的备份也会成为问题 ...

  9. LeetCode第九题—— Palindrome Number(判断回文数)

    题目描述 Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same ...

  10. 請問各位大大,我要將listview顯示的縮圖加入到listview2,請問該如何做呢

    請問各位大大,我要將listview顯示的縮圖加入到listview2,請問該如何做呢?下面的function可以將listview的縮圖加到listview2但是全都顯示listview1第一張的圖 ...