1、定义密钥的时候,定义成public,这样后期方便修改
package com.tj.utils;import com.auth0.jwt.JWT;import com.auth0.jwt.JWTCreator;import com.auth0.jwt.algorithms.Algorithm;import com.auth0.jwt.interfaces.DecodedJWT;import java.util.Calendar;import java.util.Map;public class JwtUtils {/*** jwt生成token秘钥,此处动态更新所以为空,可随便自定义*/public static String SIGN = "*&5DS^33221GSO>3";/*** 生成token,header.payload.sign** @return*/public static String gettoken(Map<String, Object> map) {/*** 设置密钥*/String key = SIGN;System.out.println("jwt的key = " + key);Calendar instance = Calendar.getInstance();instance.add(Calendar.DATE, 2); //默认1天过期//创建JWT builderJWTCreator.Builder builder = JWT.create();//payloadmap.forEach((k, v) -> {builder.withClaim(k, String.valueOf(v));});String token = builder//令牌的过期时间.withExpiresAt(instance.getTime())//sign签名.sign(Algorithm.HMAC256(key));return token;}/*** 验证token** @param token 返回DecodedJWT对象,包含token信息* @return*/public static DecodedJWT checktoken(String token) {/*** 设置密钥*///创建验证对象return JWT.require(Algorithm.HMAC256(SIGN)).build().verify(token);}}
2、每次项目启动的时候,更换一次密钥
项目启动时,可以调用一次
package com.tj.config;import com.tj.utils.JwtUtils;import com.tj.utils.TjStringUtils;import org.springframework.boot.ApplicationArguments;import org.springframework.boot.ApplicationRunner;import org.springframework.stereotype.Component;@Componentpublic class Runner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("=======项目启动,初始化执行1次---开始=======");//动态生成key密钥,并保存JwtUtils.SIGN = TjStringUtils.generateNonceStr(10);System.out.println("=======项目启动,初始化执行1次---结束=======");}}
3、实现强制全员下线的操作
通过更新密钥,这样就可以让全员下线
package com.tj.system.controller;import com.tj.utils.JwtUtils;import com.tj.utils.R;import com.tj.utils.TjStringUtils;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.*;@Slf4j //日志@RestController //RESTful风格写法@RequestMapping("/jwt") //定义API接口public class JwtSignCtrl {/*** 强制下线,即修改JWT密钥** @return*/@PostMappingpublic R<String> allOffLine() {JwtUtils.SIGN = TjStringUtils.generateNonceStr(10);return R.success("JWT密钥修改成功");}}
