Jwt生成和解析工具类(万用版,可作为数据存储容器来传输)

Jwt生成和解析工具类(万用版,可作为数据存储容器来传输)packagecom.ciih.authcenter.client.util.jwt;importcom.alibaba.fastjson.JSON;importcom.auth0.jwt.JWT;importcom.auth0.jwt.JWTCreator;importcom.auth0.jwt.JWTVerifier;importcom.auth0.jwt.algorithms.Algorithm;importcom.auth0.jwt.interfaces.Claim;.

大家好,又见面了,我是你们的朋友全栈君。

package com.ciih.authcenter.client.util.jwt;

import com.alibaba.fastjson.JSON;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Lenovo
 */
@Slf4j
@Component
public class JwtTokenUtilPlusJ {
    /**
     * 盐
     */
    public static String SECRET = "authcenter";
    private static final long EXPIRATION = 28800000L;

    /*生成token*/
    public static <T> String generateToken(T t) {
        Date expireDate = new Date(System.currentTimeMillis() + EXPIRATION * 1000);
        Date now = new Date();
        Map<String, Object> map = new HashMap<>();
        map.put("alg", "HS256");
        map.put("typ", "JWT");
        JWTCreator.Builder token = JWT.create()
                .withHeader(map)
                .withExpiresAt(expireDate)
                .withIssuedAt(now)
                .withNotBefore(now);

        token.withClaim("data",JSON.toJSONString(t));
        return token.sign(Algorithm.HMAC256(SECRET));
    }

    /*解析token*/
    public static <T> T parseToken(String token, Class<T> aclass) {
        JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
        DecodedJWT jwt = verifier.verify(token);
        Map<String, Claim> claims = jwt.getClaims();
        String string = claims.get("data").asString();
        T t = JSON.parseObject(string, aclass);
        log.info("解析Token的内容:" + t);
        return t;
    }

//    public static void main(String[] args) {
//        ArrayList<Map<String,Object>> list = new ArrayList<>();
//        HashMap<String, Object> hashMap = new HashMap<>();
//        HashMap<String, Object> hashMap1 = new HashMap<>();
//        hashMap.put("name", "怕科技的首付款");
//        hashMap.put("nam1e", "怕科技的首付款");
//        hashMap.put("na1me", "怕科技的首付款");
//        hashMap.put("na2me", "怕科技的首付款");
//        hashMap.put("na3me", "怕科技的首付款");
//        hashMap.put("na4me", "怕科技的首付款");
//        hashMap1.put("pas1sword", "水电煤气");
//        hashMap1.put("pas3sword", "水电煤气");
//        hashMap1.put("pass2word", "水电煤气");
//        hashMap1.put("pa4ssword", "水电煤气");
//        hashMap1.put("pa57ssword", "水电煤气");
//        hashMap1.put("passw8ord", "水电煤气");
//        list.add(hashMap);
//        list.add(hashMap1);
//        String s = generateToken(list);
//        System.out.println(s);
//        ArrayList arrayList = parseToken(s, ArrayList.class);
//        System.out.println(arrayList);
//    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148535.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nio和零拷贝_零拷贝

    nio和零拷贝_零拷贝传统IO传统IO的数据拷贝流程如下图:数据需要从磁盘拷贝到内核空间,再从内核空间拷到用户空间(JVM)。程序可能进行数据修改等操作再将数据拷贝到内核空间,内核空间再拷贝到网卡内存,通过网络发送出去(或拷贝到磁盘)。即数据的读写(这里用户空间发到网络也算作写),都至少需要两次拷贝。当然磁盘到内核空间属于DMA拷贝(DMA即直接内存存取,原理是外部设备不通过CPU而直接与系统内存交换……

    2022年9月21日
    0
  • sdut 3-7 类的友元函数的应用

    sdut 3-7 类的友元函数的应用

    2022年3月5日
    32
  • 跨境物流报关流程_跨境电商海关备案流程

    跨境物流报关流程_跨境电商海关备案流程  国际社会物流报关的基本工作流程有哪些?  报关是指货物、行李、邮递物品和运输工具进出境时,所有人或者其代理人应当将规定的文件、证件报海关查验。要求海关办理有关进出口手续。    二、清关:是指货物所有人履行企业相关国家法定权利义务,海关对货物放行。    海关登记和年检:指进出口单位向所在地海关申报登记,取得报关单位资格的程序。    四、外关区备案、年审:指已在该单位价值所在关区办理了报关企业注册信息登记相关手续的报关工作单位,为取得从其它关区口岸贸易进出口商品货物的报关资格.

    2022年9月21日
    1
  • 数组的前缀和及查分数组

    数组的前缀和及查分数组1,前缀和主要适用场景是原始数组不会被修改的情况下,频繁查询某个区间的累加和。这里就不写前缀和的代码了,就是用一个数组记录下原有数组的前缀和。比如,prefix[i]就代表着nums[0…i-1]所有元素的累加和,如果我们想求区间nums[i…j]的累加和,只要计算prefix[j+1]-prefix[i]即可,而不需要遍历整个区间求和。(需要注意的是使用场景是频繁查询某个区间的累加和,而不需要对原始数组进行频繁修改)2,查分数组的主要适用场景是**频繁对原始数组的某个区间的元素进行增减。**比

    2022年6月11日
    44
  • 谷歌学术里面的代码查找不到_谷歌学术引用

    谷歌学术里面的代码查找不到_谷歌学术引用谷歌浏览器里面安装FindCodeforResearchPapers插件

    2022年10月11日
    0
  • eclipse离线安装svn插件使用教程_eclipse不显示svn插件

    eclipse离线安装svn插件使用教程_eclipse不显示svn插件【Android】Eclipsesvn插件安装说明   昨天心血来潮,因为总是有些小的测试文档修改了修改去,后来某天找代码又麻烦得很,想把本机上的所有代码管理起来,在网上度娘了下,决定在Eclipse中安装svn插件,来管理本地的源代码文档。现在附上一些安装步骤,后续的使用慢慢地摸索吧。一、安装环境:PC:windowEclipse:JunoServiceRelease

    2022年10月7日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号