1.生成token与解析token部分代码

pom

<!-- token验证 --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.2.1</version></dependency>

jwt token工具类(使用的话createToken的参数与方法体与getTokenRes的返回值需要自己看着修改)

  • withAudience()可以放用户名、账户id之类的,这样就不用查询数据库了
  • withExpiresAt()放token的过期时间,上面的表示token24小时之后过期
  • sign()放签名认证,一般是放加密后的密码

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 org.springframework.stereotype.Component;import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;@Component("Token")
public class Token {/*** toekn 密钥*/private static final String JWT_SECRET = "qiesiyv";//自己随便起个字符串/*** token 过期时间*/private static final int calendarField = Calendar.DATE;private static final int calendarInterval = 30;private static final Algorithm algorithm = Algorithm.HMAC256(JWT_SECRET);// header Mapprivate static final Map<String, Object> map = new HashMap<>();private static JWTCreator.Builder createTokenBuilder() {/** 加密方式 **/map.put("alg", "HS256");map.put("typ", "JWT");// 签发时间Date iaDate = new Date();// 设置过期时间Calendar nowTime = Calendar.getInstance();nowTime.add(calendarField, calendarInterval);//前者为时间单位,后者时间数量Date expiresDate = nowTime.getTime();JWTCreator.Builder builder = JWT.create().withHeader(map).withIssuedAt(iaDate).withExpiresAt(expiresDate).withClaim("iss", "qiesiyv")  //payload iss jwt的签发者 看着起名 .withClaim("aud", "app");   //aud  接收的乙方     看着起名 return builder;}/*** 生成token** @param* @return*/public static String createToken(String uid,String userimg,String username,String userbimg) {//token保存的数据JWTCreator.Builder builder = createTokenBuilder();String token = builder.withClaim("uid", uid).withClaim("userimg", userimg).withClaim("username", username).withClaim("userbimg", userbimg).sign(algorithm);return token;}// 解析static DecodedJWT verifyToken(String token) {DecodedJWT jwt = null;try {//解析方式和密钥JWTVerifier verifier = JWT.require(algorithm).build();DecodedJWT decodedJWT = JWT.decode(token);jwt = verifier.verify(decodedJWT);} catch (Exception e) {e.printStackTrace();// token 校检失败}return jwt;}/*** 解析token获取内容* @param token* @return*/public static TokenRes getTokenRes(String token) {DecodedJWT jwt = verifyToken(token);Map<String, Claim> claimMap = jwt.getClaims();String uid = claimMap.get("uid").asString();//赋值返回值String userimg = claimMap.get("userimg").asString();String username = claimMap.get("username").asString();String userbimg = claimMap.get("userbimg").asString();TokenRes res = new TokenRes(uid,userimg,username,userbimg);return res;}
}

返回值类演示

@Data
@AllArgsConstructor
public class TokenRes {private String uid;//用户idprivate String userimg;//用户头像private String username;//用户名private String userbimg;//用户主页图
}

2.拦截规则

拦截工具类

import com.auth0.jwt.exceptions.JWTVerificationException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class JwtInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 从 http 请求头中取出 tokenString token = request.getHeader("token");System.out.println(token);// 如果不是映射到方法直接通过if(!(handler instanceof HandlerMethod)){return true;}if (StringUtils.isBlank(token)) {throw new RuntimeException("无token,请重新登录");}// 验证 tokentry {if(Token.verifyToken(token)==null)throw new RuntimeException("token无效");System.out.println("token校验");} catch (JWTVerificationException e) {throw new RuntimeException("token失效,请重新登录");}return true;}
}

拦截配置类

  • addPathPatterns() 要拦截的接口
  • excludePathPatterns()开放的接口
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** @Description: 拦截器*/
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {@Beanpublic JwtInterceptor jwtInterceptor(){return new JwtInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(jwtInterceptor()).addPathPatterns("/**").excludePathPatterns("/ceshi/ceshi","/**/import");}
}

原文

jwt生成token与解析token相关推荐

  1. JWT 生成Token、解析Token的简单工具类

    pom.xml导入依赖: <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt& ...

  2. JWT生成Token及解析Token

    JWT生成Token详解 [第一部分]历史文章: SpringBoot总结(一)--第一个SpringBoot项目 SpringBoot总结(二)--Spring Boot的自动配置 SpringBo ...

  3. JWT —— 生成Token、解析Token的简单工具类

    目录 1.JWT介绍 2.导入依赖 3.用户类 4.JWT工具类 背景:最近需要实现根据账号密码生成令牌码的功能,token解析后需要得到用户id.用户账号和用户类型.实现起来并不难,解决方法就是在J ...

  4. TokenUtil工具类(生成token和解析token)

    TokenUtil public class TokenUtil {/*** 生成token*/public static String createToken(String username, Bo ...

  5. JWT生成token

    1.简介: (1.1)JWT(Json Web Token): 为网络应用环境间传递声明而执行一种基于JSON开放标准 (1.2)JWT认证用户身份信息: 认证成功,才可获取其它资源,如:用户登录 ( ...

  6. java token生成和验证_SpringBoot集成JWT生成token及校验方法过程解析

    GitHub源码地址:https://github.com/zeng-xian-guo/springboot_jwt_token.git 封装JTW生成token和校验方法 public class ...

  7. JWT生成Token做登录校验讲解

    Free码农 2017-12-28 00:08:02 JWT简介 JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准. JWT的声明一般被用来在身份 ...

  8. C# 生成校验解析token

    C# 生成校验解析token 方式1 方式3 转载自 https://www.cnblogs.com/fanfan-90/p/12911203.html 重要对象 JwtSecurityToken:代 ...

  9. java token生成和验证_Java Token登录验证 生成解析Token

    借鉴参考 Java Token登录验证 使用jjwt生成和解析JWT java基于token验证之登陆验证 等 什么是Token? 我的理解来说 token就是你访问服务器的口令,只要token合法, ...

最新文章

  1. 黑客帝国「缸中之脑」有眉目了?培养皿中百万人脑细胞学会打乒乓球,仅用了5分钟...
  2. 【iCore3 双核心板_ uC/OS-III】例程一:认识 uC/OS-III
  3. 聚焦 | 阿里灵杰AI工程化峰会来了
  4. “万能数据库查询分析器” 5.03发布,访问EXCEL将自动为表名前后加上中括弧
  5. 华水c语言课程设计,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  6. 福州3 2五年制计算机专业的学校,福州有哪些五年制大专
  7. Atitit insert插入数据 目录 1.1. INSERT INTO SET这种方式可读性更好 1 1.1.1. 方式4、INSERT INTO 表名 SET 列名1 = 列值1,列名2=列值
  8. kx linux驱动下载,创新5.1声卡驱动kX Project Audio DriverV5.1免费版下载 - 下载吧
  9. css中border属性设置
  10. opencv中step、step1、size、elemSize以及elemSize1区别
  11. idea--Preferences
  12. java毕业设计共享充电宝系统mybatis+源码+调试部署+系统+数据库+lw
  13. ​历经 33 天,终于拿到了心仪的 Offer
  14. 学会善于总结,善于表达
  15. win7电脑怎么录制视频 电脑怎么录屏
  16. 去中心化和中心化哪个才是未来,Dex.top教你熊市生存指南
  17. Android 图片处理
  18. 小程序页面中时间戳-获取当前年月日
  19. linux开机自启动的几种方法
  20. 0的0次幂(0^0)应该等于0还是1?

热门文章

  1. Guava Collect
  2. jeecgboot初学习疑问与总结--2021-05-11
  3. 安装opencms的过程
  4. 实用主义的思考与学习 读书笔记
  5. document.getElementById(id) 与 $(#id) 的区别
  6. win98模拟器_Windows98模拟器,手机也能这样玩!
  7. MATLAB弹出对话框的使用
  8. ES6中setTimeout函数的this
  9. App 崩溃(闪退)原因
  10. 傲慢与偏见:程序员非科班出身就得不到重用?