TestJWTEncoder.java 3.45 KB
package com.zhaoonline.coupen.jwt;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;

import com.auth0.jwt.interfaces.DecodedJWT;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhaoonline.coupen.bean.Activity;
import com.zhaoonline.coupen.bean.BizType;
import com.zhaoonline.coupen.bean.CommonCoupenSeed;
import org.junit.Assert;
import org.junit.Test;

import java.io.IOException;
import java.math.BigDecimal;

/**
 * Created by ZhaoOnline<br/>
 * User: yangyoupeng<br/>
 * Date: 2016/12/14<br/>
 * Time: 10:42<br/>
 * Description:please descript you class
 */
public class TestJWTEncoder {
    ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 测试使用原生的JWT来对对象进行编码和解码
     * @throws IOException
     */
    @Test
    public void testEncodeAndDecodeWithoriginalJWT() throws IOException {
        CommonCoupenSeed coupenSeed =new CommonCoupenSeed();
        Activity  activity=  new Activity(1,"新年大礼包");
        BigDecimal totalAmount = new BigDecimal(8880);
        Integer coupenCount = 10;

        coupenSeed.setActivity(activity);
        coupenSeed.setTotalAmount(totalAmount);
        coupenSeed.setBizType(new BizType(1,"TZB"));


        coupenSeed.setCoupenCount(coupenCount);

        JWTConfig config =new JWTConfig();
        config.setIssuer("zhaoonline");
        config.setPassword("hellowwolrd");

        String  coupenSeedString =objectMapper.writeValueAsString(coupenSeed);
        String token = JWT.create()
                .withIssuer(config.getIssuer())
                .withClaim("counpen",coupenSeedString)
                .sign(Algorithm.HMAC256(config.getPassword()));

        System.out.println(token);



        JWTVerifier verifier = JWT.require(Algorithm.HMAC256(config.getPassword()))
                .withIssuer(config.getIssuer())
                .build();
        DecodedJWT jwt = verifier.verify(token);

        String coupenJsonString= jwt.getClaim("counpen").asString();



        CommonCoupenSeed decodeCoupen= objectMapper.readValue(coupenJsonString,CommonCoupenSeed.class);


        Assert.assertEquals(activity.getActivityName(), decodeCoupen.getActivity().getActivityName());
        Assert.assertEquals(coupenCount, decodeCoupen.getCoupenCount());
    }


    /**
     * 使用我们封装过得getCoupenCountJWTEncoder和JWTDecoder来测试编码和解码
     */
    @Test
    public void testEncodeAndDecodeWithWrappedJWT() throws IOException {

        CommonCoupenSeed coupenSeed =new CommonCoupenSeed();
        Activity  activity=  new Activity(1,"新年大礼包");
        BigDecimal totalAmount = new BigDecimal(8880);
        Integer coupenCount = 10;

        coupenSeed.setActivity(activity);
        coupenSeed.setTotalAmount(totalAmount);
        coupenSeed.setBizType(new BizType(1,"TZB"));


        coupenSeed.setCoupenCount(coupenCount);

        JWTConfig config =new JWTConfig();
        config.setIssuer("zhaoonline");
        config.setPassword("hellowwolrd");
        config.setEncodeKeyName("coupen");


        JWTEncoder encoder= new JWTEncoder(config);

        String token= encoder.encode(coupenSeed);


        JWTDecoder decoder=new JWTDecoder(config);

        CommonCoupenSeed decodeCoupen=  decoder.decode(token,CommonCoupenSeed.class);

        Assert.assertEquals(activity.getActivityName(), decodeCoupen.getActivity().getActivityName());
        Assert.assertEquals(coupenCount, decodeCoupen.getCoupenCount());
    }
}