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. Python3 From Zero——{最初的意识:002~字符串和文本}

    一.使用多个界定符分割字符串 字符串.split(',')形式只适用于单一分割符的情况:多分割符同时应用的时候,可使用re.split() >>> line = 'asdf fjdk ...

  2. 在Logstash的配置文件中对日志事件进行区分

    1.多个日志文件作为输入源 input { # 通过给日志事件定义类型来区分 file { path => ["/var/log/nginx/access.log"] typ ...

  3. MD5/SHA1/Hmac_SHA1

    1.MD5 #import <CommonCrypto/CommonDigest.h> + (NSString *) md5:(NSString *) input { const char ...

  4. JS函数 函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。

    函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名. 第一种情况:在<script>标签内调用. <script type="text/java ...

  5. kafka 扩展partition和replication-factor

    问题: 1. kafka的topic 是程序自己建立,默认只建立8个partitions,1个replication-factor 目的: 扩展partitions 到9个, replicatoion ...

  6. C++: string<-->char

    1. char*.char[] 与 std::string 之间的区别: char*是一个指向字符的指针,是一个内置类型.可以指向一个字符,也可以表示字符数组的首地址(首字符的地址).我们更多的时候是 ...

  7. Fence

    Fence 有一个长度为n的\([1,n]\)墙,有k位工人,第i位工人有参数\(s_i,p_i,l_i\),意思该位工人可以刷包含\(s_i\)的长度小于等于\(l_i\)的区间,报酬为区间长度乘以 ...

  8. JavaScript 对象与函数

    对象参考手册 Array Boolean Date Math Number String RegExp Global 前言 在js中什么都是对象(包括函数). 函数是用来实现具体功能的代码,用一种方式 ...

  9. 「题解」:[loj2763][JOI2013]现代豪宅

    问题 A: 现代豪宅 时间限制: 1 Sec  内存限制: 256 MB 题面 题目描述 (题目译自 $JOI 2013 Final T3$「現代的な屋敷」) 你在某个很大的豪宅里迷路了.这个豪宅由东 ...

  10. duilib教程之duilib入门简明教程17.事件处理和消息响应

    界面的显示方面就都讲完啦,下面来介绍下控件的响应.    前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEGIN_ME ...