SpringBoot2.x 使用 JWT 生成和解析Token - 简单案例

本文介绍了在SpringBoot2.3.0环境下,结合JJWT库使用JWT生成和解析Token的方法,包括创建工具类JWTService和Payload,以及如何编写拦截器进行Token校验。提供了一个简单的登录与验证Token的案例,并给出了项目源码链接。
摘要由CSDN通过智能技术生成

引用参考:https://mp.weixin.qq.com/s/kUiZ1PcBCr1shoOg_-hmvA

使用:

SpringBoot 2.3.0

JDK 1.8

Idea2019

主要jwt的依赖:

        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

工具类:JWTService.java

用于生成和解析token

package com.mx.project.common.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator.Builder;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.AlgorithmMismatchException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.mx.project.common.jwt.Payload;
import com.mx.project.pojo.User;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.*;

@Component
public class JWTService {
	
	private String secret = "secret";
	private String issuer = "USERSERVICE";//发布者
	private String subject = "userLoginToken";//主题
	private String audience = "APP";//签名的观众 也可以理解谁接受签名的
	private Map<String,String> claims;//自定义签名
	
	/**
	 * 创建 hour小时后过期的Token 
	 * @param claims
	 * @param hour
	 * @return
	 */
	public  String createToken(Map<String,String> claims,int hour) {
		Payload createPayload = this.createPayload(1);
		createPayload.setClaims(claims);
		Algorithm hmac256 = Algorithm.HMAC256(this.getSecret());
		return createToken(createPayload,hmac256);
	}
	/**
	 * 根据负载和算法创建Token
	 * @param payload
	 * @param algorithm
	 * @return
	 */
	public  String createToken(Payload payload,Algorithm algorithm) {
		
			Builder headBuilder = createHeaderBuilder(algorithm);
			Builder publicClaimbuilder = addPublicClaimBuilder(headBuilder,payload);
			Builder privateClaimbuilder = addPrivateClaimbuilder(publicClaimbuilder,payload);
			String token = privateClaimbuilder.sign(algorithm);
		    return token;
	}
	/**
	 * 创建自定小时后过期的负载
	 * @param hour
	 * @return
	 */
	public Payload createPayload(int hour) {
		Payload payload = new Payload();
		payload.setIssuer(this.getIssuer());
		payload.setSubject(this.getSubject());
		payload.setAudience(this.getAudience());
		this.setIssuedAtAndExpiresAt(new Date(), hour, payload);
		return payload;
	}
	/**
	 * 创建自定小时后过期的负载
	 * @param hour
	 * @return
	 */
	public Payload createPayload(String issuer, String subject, String audience, Date date,int hour) {
		Payload payload = new Payload();
		payload.setIssuer(issuer);
		payload.setSubject(subject);
		payload.setAudience(audience);
		this.setIssuedAtAndExpiresAt(date, hour, payload);
		return payload;
	}
	/**
	 * 添加私有声明
	 * @param builder
	 * @param payload
	 * @return
	 */
	private Builder addPrivateClaimbuilder(Builder builder, Payload payload) {
		Map<String, String> claim
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值