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

JWT的介绍这里就不说了,想了解的可以看一下这边博客:JSON Web Token 入门教程

或者直接参考官方网站:https://jwt.io

项目是SpringBoot2.0,下面直接上代码。

Maven配置:

  1. <dependency>
  2. <groupId>com.auth0</groupId>
  3. <artifactId>java-jwt</artifactId>
  4. <version>3.3.0</version>
  5. </dependency>

JWT工具:

这里使用了自定义字段和官方建议字段

  1. package com.example.demo.util;
  2.  
  3. import com.auth0.jwt.JWT;
  4. import com.auth0.jwt.JWTVerifier;
  5. import com.auth0.jwt.algorithms.Algorithm;
  6. import com.auth0.jwt.interfaces.Claim;
  7. import com.auth0.jwt.interfaces.DecodedJWT;
  8. import java.util.Calendar;
  9. import java.util.Date;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12.  
  13. /**
  14. * @date 2019/4/25 11:46
  15. * @atuther wangbo
  16. */
  17. public class JwtUtil {
  18.  
  19. //密钥
  20. public static final String SECRET = "sdjhakdhajdklsl;o653632";
  21. //过期时间:秒
  22. public static final int EXPIRE = 5;
  23.  
  24. /**
  25. * 生成Token
  26. * @param userId
  27. * @param userName
  28. * @return
  29. * @throws Exception
  30. */
  31. public static String createToken(String userId, String userName) throws Exception {
  32. Calendar nowTime = Calendar.getInstance();
  33. nowTime.add(Calendar.SECOND, EXPIRE);
  34. Date expireDate = nowTime.getTime();
  35.  
  36. Map<String, Object> map = new HashMap<>();
  37. map.put("alg", "HS256");
  38. map.put("typ", "JWT");
  39.  
  40. String token = JWT.create()
  41. .withHeader(map)//头
  42. .withClaim("userId", userId)
  43. .withClaim("userName", userName)
  44. .withSubject("测试")//
  45. .withIssuedAt(new Date())//签名时间
  46. .withExpiresAt(expireDate)//过期时间
  47. .sign(Algorithm.HMAC256(SECRET));//签名
  48. return token;
  49. }
  50.  
  51. /**
  52. * 验证Token
  53. * @param token
  54. * @return
  55. * @throws Exception
  56. */
  57. public static Map<String, Claim> verifyToken(String token)throws Exception{
  58. JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
  59. DecodedJWT jwt = null;
  60. try {
  61. jwt = verifier.verify(token);
  62. }catch (Exception e){
  63. throw new RuntimeException("凭证已过期,请重新登录");
  64. }
  65. return jwt.getClaims();
  66. }
  67.  
  68. /**
  69. * 解析Token
  70. * @param token
  71. * @return
  72. */
  73. public static Map<String, Claim> parseToken(String token){
  74. DecodedJWT decodedJWT = JWT.decode(token);
  75. return decodedJWT.getClaims();
  76. }
  77.  
  78. }

测试类:

  1. public static void main(String[] args){
  2. try {
  3. String token = JwtUtil.createToken("12345", "wangbo");
  4. System.out.println("token=" + token);
  5. //Thread.sleep(5000);
  6. Map<String, Claim> map = JwtUtil.verifyToken(token);
  7. //Map<String, Claim> map = JwtUtil.parseToken(token);
  8. //遍历
  9. for (Map.Entry<String, Claim> entry : map.entrySet()){
  10. if (entry.getValue().asString() != null){
  11. System.out.println(entry.getKey() + "===" + entry.getValue().asString());
  12. }else {
  13. System.out.println(entry.getKey() + "===" + entry.getValue().asDate());
  14. }
  15. }
  16. }catch (Exception e){
  17. e.printStackTrace();
  18. }

测试结果:

  1. token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiLmtYvor5UiLCJ1c2VyTmFtZSI6IndhbmdibyIsImV4cCI6MTU1NjE3NjYwNiwidXNlcklkIjoiMTIzNDUiLCJpYXQiOjE1NTYxNzY2MDF9.FNVh-NbFHgScsbbuwLvQL-sOqLuaAoI8jxMvudq81J8
  2. sub===测试
  3. userName===wangbo
  4. exp===Thu Apr 25 15:16:46 CST 2019
  5. userId===12345
  6. iat===Thu Apr 25 15:16:41 CST 2019

基本就是这些了。

使用 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

    1.JWT简介 JSON Web Token 简称JWT.一个JWT实际上就是一个字符串,它由三部分组成,头部.载荷与签名.JWT生成的token是这样的 2.Json Web Token(JWT)生 ...

  4. JWT生成Token做登录校验

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

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

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

  6. Token_使用JWT生成token

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

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

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

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

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

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

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

随机推荐

  1. web优化(一)

    今天读完了<高性能网站建设进阶指南>,记得博客园的某位前辈说,关于前端方面的书,带指南两个字的一般都是比较牛逼的,上一本看到的好书是<javascript权威指南>是淘宝前段团 ...

  2. 25.创业真的需要app吗?真的需要外包吗?

    两个星期前,一名亲戚的朋友打算投入自己的二十多万元去搞个摄影社交app,问我有没有靠谱的外包推荐,我赶紧劝住他,现在app的成本已经非常高了,初期的研发就要十几万,加上后期的推广(每个用户成本大概2元 ...

  3. TestNG教程网站

    比较简明的一些TestNG教程网站 : https://www.jianshu.com/p/74816a200221 http://www.yiibai.com/testng/parameterize ...

  4. options.go

    ,         SnappyEnabled: true,         TLSMinVersion: tls.VersionTLS10,         Logger: log.New(os.S ...

  5. cogs 2235 烤鸡翅

    贪心,每次如果够直接卖,不够找到之前的卖出的最多的一份,然后反悔 不过反悔的确是很好的策略! #include<cstdio> #include<cstring> #inclu ...

  6. BZOJ_5118_Fib数列2_矩阵乘法+欧拉定理

    BZOJ_5118_Fib数列2_矩阵乘法+欧拉定理 Description Fib定义为Fib(0)=0,Fib(1)=1,对于n≥2,Fib(n)=Fib(n-1)+Fib(n-2) 现给出N,求 ...

  7. BZOJ_2073_[POI2004]PRZ_状压DP

    BZOJ_2073_[POI2004]PRZ_状压DP 题意: 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上 ...

  8. BZOJ_4006_[JLOI2015]管道连接_斯坦纳树

    BZOJ_4006_[JLOI2015]管道连接_斯坦纳树 题意: 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰. 该部门有 n 个情报站,用 1 到 n 的整数编号.给出 m ...

  9. BZOJ_4443_[Scoi2015]小凸玩矩阵_二分+二分图匹配

    BZOJ_4443_[Scoi2015]小凸玩矩阵_二分+二分图匹配 Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个 ...

  10. HttpClient4 TIME_WAIT和CLOSE_WAIT

    最近,公司的接口服务器(客户端,向外发送数据)频繁出现了connect timeout 以及readtime out 的情况,经过运维平台检测,并没有网络延时的情况.于是,开始怀疑连接池出了问题. 使 ...