使用 JWT 生成 Token 代码示例
JSON Web Token,简称 JWT, 是一个开放的标准(RFC 7519),它定义了以一种紧凑的、自包含的 JSON 对象在各方之间安全传输信息的方式。该信息含有数字签名,可以被验证和信任。
JWT的介绍这里就不说了,想了解的可以看一下这边博客:JSON Web Token 入门教程
或者直接参考官方网站:https://jwt.io
项目是SpringBoot2.0,下面直接上代码。
Maven配置:
- <dependency>
- <groupId>com.auth0</groupId>
- <artifactId>java-jwt</artifactId>
- <version>3.3.0</version>
- </dependency>
JWT工具:
这里使用了自定义字段和官方建议字段
- package com.example.demo.util;
- import com.auth0.jwt.JWT;
- import com.auth0.jwt.JWTVerifier;
- import com.auth0.jwt.algorithms.Algorithm;
- import com.auth0.jwt.interfaces.Claim;
- import com.auth0.jwt.interfaces.DecodedJWT;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * @date 2019/4/25 11:46
- * @atuther wangbo
- */
- public class JwtUtil {
- //密钥
- public static final String SECRET = "sdjhakdhajdklsl;o653632";
- //过期时间:秒
- public static final int EXPIRE = 5;
- /**
- * 生成Token
- * @param userId
- * @param userName
- * @return
- * @throws Exception
- */
- public static String createToken(String userId, String userName) throws Exception {
- Calendar nowTime = Calendar.getInstance();
- nowTime.add(Calendar.SECOND, EXPIRE);
- Date expireDate = nowTime.getTime();
- Map<String, Object> map = new HashMap<>();
- map.put("alg", "HS256");
- map.put("typ", "JWT");
- String token = JWT.create()
- .withHeader(map)//头
- .withClaim("userId", userId)
- .withClaim("userName", userName)
- .withSubject("测试")//
- .withIssuedAt(new Date())//签名时间
- .withExpiresAt(expireDate)//过期时间
- .sign(Algorithm.HMAC256(SECRET));//签名
- return token;
- }
- /**
- * 验证Token
- * @param token
- * @return
- * @throws Exception
- */
- public static Map<String, Claim> verifyToken(String token)throws Exception{
- JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
- DecodedJWT jwt = null;
- try {
- jwt = verifier.verify(token);
- }catch (Exception e){
- throw new RuntimeException("凭证已过期,请重新登录");
- }
- return jwt.getClaims();
- }
- /**
- * 解析Token
- * @param token
- * @return
- */
- public static Map<String, Claim> parseToken(String token){
- DecodedJWT decodedJWT = JWT.decode(token);
- return decodedJWT.getClaims();
- }
- }
测试类:
- public static void main(String[] args){
- try {
- String token = JwtUtil.createToken("12345", "wangbo");
- System.out.println("token=" + token);
- //Thread.sleep(5000);
- Map<String, Claim> map = JwtUtil.verifyToken(token);
- //Map<String, Claim> map = JwtUtil.parseToken(token);
- //遍历
- for (Map.Entry<String, Claim> entry : map.entrySet()){
- if (entry.getValue().asString() != null){
- System.out.println(entry.getKey() + "===" + entry.getValue().asString());
- }else {
- System.out.println(entry.getKey() + "===" + entry.getValue().asDate());
- }
- }
- }catch (Exception e){
- e.printStackTrace();
- }
测试结果:
- token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiLmtYvor5UiLCJ1c2VyTmFtZSI6IndhbmdibyIsImV4cCI6MTU1NjE3NjYwNiwidXNlcklkIjoiMTIzNDUiLCJpYXQiOjE1NTYxNzY2MDF9.FNVh-NbFHgScsbbuwLvQL-sOqLuaAoI8jxMvudq81J8
- sub===测试
- userName===wangbo
- exp===Thu Apr 25 15:16:46 CST 2019
- userId===12345
- iat===Thu Apr 25 15:16:41 CST 2019
基本就是这些了。
使用 JWT 生成 Token 代码示例的更多相关文章
- 国服最强JWT生成Token做登录校验讲解,看完保证你学会!
转载于:https://blog.csdn.net/u011277123/article/details/78918390 Free码农 2017-12-28 00:08:02 JWT简介 JWT(j ...
- 利用jwt生成token,用于http请求身份验证
前段时间在做移动端接口过程中,考虑到安全性,所有移动端发送请求(除了登录请求)过程中进行token有效验证. 1.利用jwt生成token a.导入jwt相关包 <!-- jwt --> ...
- JWT生成token
1.JWT简介 JSON Web Token 简称JWT.一个JWT实际上就是一个字符串,它由三部分组成,头部.载荷与签名.JWT生成的token是这样的 2.Json Web Token(JWT)生 ...
- JWT生成Token做登录校验
一.JWT的优点 1.服务端不需要保存传统会话信息,没有跨域传输问题,减小服务器开销. 2.jwt构成简单,占用很少的字节,便于传输. 3.json格式通用,不同语言之间都可以使用. 二.使用JWT进 ...
- .NET6 JWT(生成Token令牌)
一.Net 6环境下的.net core项目里如何使用JWT. 第一步,在Nuget引入JWT.Microsoft.AspNetCore.Authentication.JwtBearer这两个NuGe ...
- Token_使用JWT生成token
1.token三部分 header { "typ": "JWT", "alg": "HS256" } paylo ...
- JWT生成token及过期处理方案
业务场景 在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE.REACTJS等构建)使用token与后端接口交互,以达到安全的目的.本文结合stacko ...
- tp5使用jwt生成token,做api的用户认证
首先 composer 安装 firebase/php-jwt github:https://github.com/firebase/php-jwt composer require firebas ...
- JSON Web Token (JWT)生成Token及解密实战。
昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是Java支持的算法中最全的,推荐使用,网址如下. https://githu ...
随机推荐
- web优化(一)
今天读完了<高性能网站建设进阶指南>,记得博客园的某位前辈说,关于前端方面的书,带指南两个字的一般都是比较牛逼的,上一本看到的好书是<javascript权威指南>是淘宝前段团 ...
- 25.创业真的需要app吗?真的需要外包吗?
两个星期前,一名亲戚的朋友打算投入自己的二十多万元去搞个摄影社交app,问我有没有靠谱的外包推荐,我赶紧劝住他,现在app的成本已经非常高了,初期的研发就要十几万,加上后期的推广(每个用户成本大概2元 ...
- TestNG教程网站
比较简明的一些TestNG教程网站 : https://www.jianshu.com/p/74816a200221 http://www.yiibai.com/testng/parameterize ...
- options.go
, SnappyEnabled: true, TLSMinVersion: tls.VersionTLS10, Logger: log.New(os.S ...
- cogs 2235 烤鸡翅
贪心,每次如果够直接卖,不够找到之前的卖出的最多的一份,然后反悔 不过反悔的确是很好的策略! #include<cstdio> #include<cstring> #inclu ...
- 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,求 ...
- BZOJ_2073_[POI2004]PRZ_状压DP
BZOJ_2073_[POI2004]PRZ_状压DP 题意: 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上 ...
- BZOJ_4006_[JLOI2015]管道连接_斯坦纳树
BZOJ_4006_[JLOI2015]管道连接_斯坦纳树 题意: 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰. 该部门有 n 个情报站,用 1 到 n 的整数编号.给出 m ...
- BZOJ_4443_[Scoi2015]小凸玩矩阵_二分+二分图匹配
BZOJ_4443_[Scoi2015]小凸玩矩阵_二分+二分图匹配 Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个 ...
- HttpClient4 TIME_WAIT和CLOSE_WAIT
最近,公司的接口服务器(客户端,向外发送数据)频繁出现了connect timeout 以及readtime out 的情况,经过运维平台检测,并没有网络延时的情况.于是,开始怀疑连接池出了问题. 使 ...