首页 > 其他分享 >jwt工具类

jwt工具类

时间:2023-07-10 21:14:05浏览次数:50  
标签:return String jwt param token jwtToken 工具

(1条消息) JWT 实现登录_jwt登录_Dailyblue的博客-CSDN博客

JWT详解「建议收藏」-腾讯云开发者社区-腾讯云 (tencent.com)

依赖

<dependency>
   <groupId>io.jsonwebtoken</groupId>
   <artifactId>jjwt</artifactId>
   <version>0.9.1</version>
</dependency>

JwtConfig.java

package com.example.demo.config;

import com.example.demo.po.User;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;

public class JwtConfig {

    //常量
    public static final long EXPIRE = 1000 * 60 * 60 * 24; //token过期时间
    public static final String APP_SECRET = "1234"; //秘钥,加盐

    //    @param id 当前用户ID
    //    @param issuer 该JWT的签发者,是否使用是可选的
    //    @param subject 该JWT所面向的用户,是否使用是可选的
    //    @param ttlMillis 什么时候过期,这里是一个Unix时间戳,是否使用是可选的
    //    @param audience 接收该JWT的一方,是否使用是可选的
    //生成token字符串的方法
    public static String getJwtToken(User user) {

        String JwtToken = Jwts.builder()
                .setHeaderParam("typ", "JWT")    //头部信息
                .setHeaderParam("alg", "HS256")    //头部信息
                //下面这部分是payload部分
                // 设置默认标签
                .setSubject("dailyblue")    //设置jwt所面向的用户
                .setIssuedAt(new Date())    //设置签证生效的时间
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE))    //设置签证失效的时间
                //自定义的信息,这里存储id和姓名信息
                .claim("id", user.getId())  //设置token主体部分 ,存储用户信息
                .claim("name", user.getUserName())
                //下面是第三部分
                .signWith(SignatureAlgorithm.HS256, APP_SECRET)
                .compact();
        // 生成的字符串就是jwt信息,这个通常要返回出去
        return JwtToken;
    }

    /**
     * 判断token是否存在与有效
     * 直接判断字符串形式的jwt字符串
     *
     * @param jwtToken
     * @return
     */
    public static boolean checkToken(String jwtToken) {
        if (StringUtils.isEmpty(jwtToken)) return false;
        try {
            Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 判断token是否存在与有效,是否被篡改
     * 因为通常jwt都是在请求头中携带,此方法传入的参数是请求
     *
     * @param request
     * @return
     */
    public static boolean checkToken(HttpServletRequest request) {
        try {
            String jwtToken = request.getHeader("token");//注意名字必须为token才能获取到jwt
            if (StringUtils.isEmpty(jwtToken)) return false;
            Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 根据token字符串获取会员id
     * 这个方法也直接从http的请求中获取id的
     *
     * @param request
     * @return
     */
    public static String getMemberIdByJwtToken(HttpServletRequest request) {
        String jwtToken = request.getHeader("token");
        if (StringUtils.isEmpty(jwtToken)) return "";
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
        Claims claims = claimsJws.getBody();
        return claims.get("id").toString();
    }

    /**
     * 解析JWT
     * @param jwt
     * @return
     */
    public static Claims parseJWT(String jwt) {
        Claims claims = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwt).getBody();
        return claims;
    }
}

 

标签:return,String,jwt,param,token,jwtToken,工具
From: https://www.cnblogs.com/liweimingbk/p/17542329.html

相关文章

  • JVM常用工具分析
    JVM基础分析、故障解决工具常用jdk工具jps:JvmProcessStatusTool显示系统内全部的虚拟机进程;jstat:JvmStatisticsMonitoringTool动态收集指定进程运行时数据;jinfo:ConfigurationInfoForJava实时显示或调整虚拟机的配置信息;jmap:MemoryMapForJava生......
  • SQ工具|5|界址点顺时针编号
    顺时针编码工具,是以宗地节点的起始点为起点,沿着宗地的边,对界址点进行顺时针编码。点击顺时针编码工具,界面如图所示 界面介绍:1.首尾去重,当同属于一个宗地的界址点在起始点存在重复时,勾选此功能可去除重复点编号。2.编号带'J':为界址点的编号前加一个'J'字符。3.内环顺时针:......
  • SQ工具|0|ArcGIS插件的使用方式
    打开压缩包中的MLR.exe,选择一个输出路径,点击submmit,将生成的文件发我进行授权。①关闭所有正在运行的ArcMap,并打开一个新的ArcMap界面。②点击上方的自定义,选择自定义模式。③点击从文件添加④选择插件文件夹中的后缀为tlb的文件⑤点击打开,稍等片刻,在弹出的对话框中点击确......
  • SQ工具|4|宗地节点重排|西北点起始点
    在要求图斑的起始点为西北节点时,可使用该工具完成对要素节点的处理此工具的西北点定义为:以目标要素的外包矩的左上点为基准,距离此基准点最近的点定义为西北点,设为起始点方式一: 打开西北节点(自动赋值)工具,如下图所示: 图层选择待处理的图层,约束条件为约束将重排的图斑,如......
  • 程序员必备:使用AI工具通义千问,没有广告没有假链接,比搜索引擎要便捷多了,回答还算满意
    我提的问题是:使用Python连接Oracle,cx_Oracle和oracledb那个效率更高,功能更全,请列出他们的区别和实例代码回复是:以下是使用Python连接Oracle时,cx_Oracle和oracledb的效率和功能比较及实例代码:效率比较:cx_Oracle是一个Python官方标准库,使用了JIT编译技术,可以提高查询性能。ora......
  • SQ工具|3|界址点线生成|ZDZHDM赋值
    以 不动产登记数据库TD/T1066-2021数据库规范中的宗地及界址点线为依据界面介绍: 此工具主要实现了界址线属性的计算,以ZDZHDM(记录相邻界址点、界址线的宗地代码)为主,所需数据包括对应的宗地数据界址点自动赋值包括:界址线自动赋值包括:如果缺少界址点、界址线数据,点击......
  • 混沌测试工具ChaosBlade
    王者藏于民,霸者藏于大夫,残国亡家藏于箧---《管子》原文链接:https://blog.csdn.net/u013256816/article/details/99917021一、前言ChaosBlade是一款遵循混沌工程实验原理,建立在阿里巴巴近十年故障测试和演练实践基础上,并结合了集团各业务的最......
  • Go优雅的错误处理: 支持错误堆栈, 错误码, 错误链的工具库
    地址:https://github.com/morrisxyang/errors如果觉得有用欢迎Star和PR,有问题请直接提issueerrors简单的支持错误堆栈,错误码,错误链的工具库:支持携带堆栈,嵌套构造错误链支持携带错误码,方便接口返回支持自定义堆栈打印深度和错误链打印格式使用......
  • MyEclipse 10 配置jad反编译工具步骤及详解
    MyEclipse10如何查看底层源码可以配置jad//下面是步骤:方法一1、下载jad158g.win.zip文件和net.sf.jadclipse_3.3.0.jar文件。2、将下载的jad158g.win.zip文件解压,并将jad.exe文件复制到jdk的安装目录下的jre文件夹下。例如:D:\develop\Java\jre7\bin\jad.exe。3、将下载的net......
  • Java获取名字首字母拼音及用户按名字拼音分组工具
    一、需求分析最近在做一个类似于微信用户通讯录的功能,所以考虑通过查找的好友列表,在后台遍历按照26个字母分组,前台获取到Json循环26个字母直接解析对应的字符下的名称为一组分隔,没有则不显示,工具如下↓二、引入Pom<dependency> <groupId>com.belerweb</groupId> <artif......