码迷,mamicode.com
首页 > 其他好文 > 详细

Token的生成和检验

时间:2018-04-21 22:52:15      阅读:744      评论:0      收藏:0      [点我收藏+]

标签:cio   name   his   ken   print   unit   客户   stat   今日头条   

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的生成和检验

标签:cio   name   his   ken   print   unit   客户   stat   今日头条   

原文地址:https://www.cnblogs.com/CY-947205926/p/8904086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!