首页 > 其他分享 >JWT安全验证工具

JWT安全验证工具

时间:2023-05-27 13:11:53浏览次数:30  
标签:String 验证 JWT public token static import 工具 payload

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.jwt.JWTUtil;
import cn.hutool.jwt.signers.JWTSigner;
import cn.hutool.jwt.signers.JWTSignerUtil;
import lombok.experimental.UtilityClass;
import org.slf4j.Logger;

import javax.servlet.http.HttpServletResponse;
import java.util.Map;

import static org.slf4j.LoggerFactory.getLogger;

/**
 * 安全工具
 *
 * @author JHL
 * @version 1.0
 * @date 2023/5/15 15:25
 * @since : JDK 11
 */
@UtilityClass
public class SecurityUtil {


    private static final Logger logger = getLogger(SecurityUtil.class);

    private static final byte[] SECRET = "!@#$%^&*(dasdasdsadsa#$%^&*(".getBytes();

    /**
     * 一天
     */
    private static final Integer TIME_OUT = 1440;

    /**
     * 验证字段头
     */
    private static final String VERIFY_KEY = "_a";


    public static final String HEADER_AUTH_KEY = "Authorization";


    /**
     * 系统白名单
     */
    public static final String[] WHITELIST_KEY =
            new String[]{
                    "login","code"
            };

    /**
     * 白名单路径跳过验证
     */
    public static boolean whitelist(String target) {
        for (String s : WHITELIST_KEY) {
            if (target.contains(s)) {
                return true;
            }
        }
        return false;
    }


    /**
     * token解码
     */
    public static JSONObject getPayload(String token) {
        return JWTUtil.parseToken(token).getPayloads();
    }

    /**
     * token验证
     */
    public static boolean verify(String token) {
        boolean r = JWTUtil.verify(token, SECRET);
        if (r) {
            JSONObject payload = getPayload(token);
            if (StrUtil.isNotEmpty(payload.getStr(VERIFY_KEY))) {
                DateTime now = DateUtil.date();
                DateTime a = DateUtil.date(payload.getLong(VERIFY_KEY));
                if (a.after(now)) {
                    return true;
                }
            }
        }
        logger.error("######################### \t[ 登录token过期 ]\t #########################");
        return false;
    }

    /**
     * 创建token
     */
    public static String createToken(Map<String, Object> payload) {
        DateTime now = DateUtil.date();
        DateTime a = DateUtil.offset(now, DateField.MINUTE, TIME_OUT);
        payload.put("_a", a.getTime());
        JWTSigner signer = JWTSignerUtil.hs256(SECRET);
        return JWTUtil.createToken(payload, signer);
    }

    /**
     * 在响应头中创建token
     */
    public static void createToken(JSONObject payload, HttpServletResponse response) {
        response.setHeader(HEADER_AUTH_KEY, createToken(payload));
    }
}

标签:String,验证,JWT,public,token,static,import,工具,payload
From: https://www.cnblogs.com/hhddd-1024/p/17436604.html

相关文章

  • 报文常用测试工具-----IPOP V4.1
    摘自:https://blog.csdn.net/weixin_40013461/article/details/126368274下载地址:http://y.downyagt.com:7658/down4/hwipgj_downyi.com.zip1.1、IPOP简介IPOP软件是一个华为IP工具的集合,最原始的功能是IP地址动态绑定,后续在此基础上不断的进行了扩充,就形成了现在的版本。IPOP是......
  • 自动化漏洞扫描工具使用指南
    作为企业的IT安全管理员,您的重要任务之一,一定离不开全面的漏洞管理。即,全方位地评估、报告和缓解企业内部技术栈中,存在的各项安全弱点和网络威胁。而面对此类繁杂复杂的工作时,我们往往需要借助自动化的漏洞扫描程序,来更加高效地识别出潜在的弱点,并实现对于漏洞的基础性管理。从原理......
  • 关于oracleJdk连接maven产生ssl验证问题
    问题:failedtotransferfromhttps://repo.maven.apache.org/maven2/duringapreviousattempt这是因为oraclejdk1.8存在ssl验证问题添加以下信息到idea的maven当中即可-Dmaven.wagon.http.ssl.insecure=true-Dmaven.wagon.http.ssl.allowall=true-Dmaven.wagon......
  • 文件管理类 FileUtils 打印工具LogUtil
    FileUtilsobjectFileUtils{constvalSIZETYPE_B=1//获取文件大小单位为B的double值constvalSIZETYPE_KB=2//获取文件大小单位为KB的double值constvalSIZETYPE_MB=3//获取文件大小单位为MB的double值constvalSIZETYPE_GB=4//获取......
  • 制作启动U盘的工具----Ventoy
    介绍直接上官网:https://www.ventoy.net/cn/index.html以下信息均来自官网。简单来说,Ventoy是一个制作可启动U盘的开源工具。有了Ventoy你就无需反复地格式化U盘,你只需要把ISO/WIM/IMG/VHD(x)/EFI等类型的文件直接拷贝到U盘里面就可以启动了,无需其他操作。你可以一次性拷贝......
  • 华为ISDP:从ChatGPT说起,企业作业数字化转型需要怎样的平台工具?
    在各行各业轰轰烈烈的数字化转型浪潮中,企业一方面需要实现自身数字化转型以向客户提供更好的业务体验,提升效率,另一方面需要发挥数字化杠杆作用使能企业成本降低,增强行业竞争力。在2023年第20届华为分析师大会开幕式上,华为轮值董事长孟晚舟分享了分享数字化转型三个核心洞见,她指出华......
  • m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
    1.算法仿真效果matlab2022a/vivado2019.2仿真结果如下:matlab仿真:0.5码率,H是4608×9216的矩阵。FPGA仿真:对比如下:2.算法涉及理论知识概要LDPC译码分为硬判决译码和软判决译码。硬判决译码又称代数译码,主要代表是比特翻转(BF)译码算法,它的实现比较简单,但是译码性能很差......
  • m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
    1.算法仿真效果matlab2022a/vivado2019.2仿真结果如下: matlab仿真: 0.5码率,H是4608×9216的矩阵。   FPGA仿真:    对比如下:   2.算法涉及理论知识概要         LDPC译码分为硬判决译码和软判决译码。         硬判决译码又称......
  • 自动化工具ansible的部署和使用
    (文章目录)前言Ansible是一种自动化工具,可用于部署、配置和管理计算机系统。它是基于Python的开源软件,具有易于使用、可靠、灵活和可扩展等特点,被广泛应用于IT管理领域。Ansible提供了一个简单而强大的语言,用于描述系统如何配置和管理,称为“Playbook”。它使用SSH协议作为通信......
  • 自定义占位符替换工具类
    添加依赖<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency>工具类importorg.apache.commons.lang3.StringUtils;importo......