package TestToken;

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 org.junit.Test; import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; public class TokenTest { //公共密钥客户端不会知道
public static String SECRET="FreeMaNong"; public static String createToken() throws UnsupportedEncodingException {
//签名发布时间
Date iatDate=new Date();
System.out.println(iatDate);//英文时间 //设置签名过期时间 1分钟
Calendar nowTime=Calendar.getInstance();
nowTime.add(Calendar.MINUTE,1);
Date expiresDate=nowTime.getTime();
//System.out.println(expiresDate); Map<String,Object> map=new HashMap<String, Object>();
map.put("alg","HS256");//设置算法 为HS256
map.put("typ","JWT");//设置类型为JWT
String token=JWT.create().withHeader(map)
.withClaim("name","Free码农")
.withClaim("age","28")
.withClaim("org","今日头条")
.withClaim("username","chenyu")
.withIssuedAt(iatDate)//设置签发时间
.withExpiresAt(expiresDate)//设置过去时间 过期时间大于签发时间
.sign(Algorithm.HMAC256(SECRET));//用公共密钥加密
//System.out.println(token);
return token;
} public static Map<String,Claim> verifyToken(String token) throws UnsupportedEncodingException {
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();
} @Test
public void TestToken() throws UnsupportedEncodingException {
String token=createToken();
System.out.println("Token:"+token);
Map<String,Claim> claims=verifyToken(token);
System.out.println(claims.get("name").asString());
System.out.println(claims.get("age").asString());
System.out.println(claims.get("username").asString());
System.out.println(claims.get("org")==null?null:claims.get("org").asString()); //测试过期token
// String GuoQiToken="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhdXRoMCJ9.izVguZPRsBQ5Rqw6dhMvcIwy8_9lQnrO3vpxGwPCuzs";
// Map<String,Claim> claims2=verifyToken(GuoQiToken);
} @Test
public void Test() throws UnsupportedEncodingException {
Algorithm algorithm = Algorithm.HMAC256("secret");
String token = JWT.create().withIssuer("auth0") .sign(algorithm);
System.out.println(token);
}
}

  

Token的生成和检验的更多相关文章

  1. ASP.NET OAuth:access token的加密解密,client secret与refresh token的生成

    在 ASP.NET OWIN OAuth(Microsoft.Owin.Security.OAuth)中,access token 的默认加密方法是: 1) System.Security.Crypt ...

  2. token的生成和应用

    token的生成和应用 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的授权过程: ...

  3. JWT实现token的生成和认证demo

    上篇写到对JWT的理解,这篇写一个小的demo来实践下 Github:https://github.com/wuhen152033/token/tree/dev 简介 本次的demo是基于Spring ...

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

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

  5. php token的生成

    转载自:http://blog.snsgou.com/post-766.html --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的 ...

  6. token的生成规则

    1.token生成规则要添加时间戳,timestamp,以便解析token时,可以根据判断时间超过30分钟不予处理.像session过期时间一样.

  7. [Python]token的生成及验证

    hmac模块(仅在python3中可以使用) 简介: HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出. 典型应用: HMAC的一 ...

  8. php token的生成和使用

    原文连接:http://ukagaka.github.io/php/2018/05/08/JWT.html 1. 为什么要使用tokent进行登录 前后端分离或者为了支持多个web应用,那么原来的co ...

  9. Java实现token的生成与验证-登录功能

    一.token与cookie相比较的优势1.支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的: 2.无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而 ...

随机推荐

  1. Android Studio 老提示adb问题

    Android Studio 老提示adb问题,restart后任然无解,最后发现某手机助手软件占用端口... 解决步骤: C:\Users\xxx>netstat -ano | findstr ...

  2. unity实现一个物体绕着某点旋转

    transform.RotateAround(o.transform.position,Vector3.up,20*Time.deltaTime);transform.Rotate(Vector3.u ...

  3. 建库,建表,添加数据 SQL命令

    create database ssm default character set utf8; use ssm; create table flower( id int(10) primary key ...

  4. docker 加速器配置目录

    centos 7 : /lib/systemd/system/docker.service

  5. 2018.12.31 NOIP训练 偶数个5(简单数论)

    传送门 对于出题人zxyoizxyoizxyoi先%\%%为敬题目需要龟速乘差评. 题意简述:5e55e55e5组数据,给出n,请你求出所有n位数中有偶数个5的有多少,n≤1e18n\le1e18n≤ ...

  6. 树状数组(hdu-4325,hdu-1166,pat-1057)

    1.hdu-4325 题意:插花,要么给出插花的范围,要么查询某个点的花的个数. 思路:通过更新,每次更新区间S到T的数值,表插入花(这一点一开始没想到), 要么查询某个点的花的数目. (与以往单纯的 ...

  7. 简单实现"Tomcat"

    Tomcat的主要功能就是接收客户端的Http请求,然后将请求分发,并且将请求封装,最后返回资源给到客户端.话不多说,开干. 一.实现设计图            (禁止盗图,除非先转支付宝!!!) ...

  8. 关于Excel分析图插入到论文的问题

    为了保证插入到latex图片不失真,可将Excel中的图进行如下操作: 1.将Excel分析图另存为.pdf格式: 2.利用Adobe acrobat裁剪掉空白的部分,另存为.eps格式: 3.将ep ...

  9. vue中的前置守卫

    前置守卫是为了验证用户信息真实性,一些内容只能在用户登陆以后才能进行查看,例如个人中心,我的购物车,等个人页面,非隐私页面 用router.beforeEach进行验证,这个方法必须写在router实 ...

  10. mui学习

      改变状态栏的颜色 <meta name="apple-mobile-web-app-capable" content="yes"> <me ...