jwt工具类
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.Objects; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; /** * JWT 工具类 * * @author stonffe * @date 2024/4/18 */ @ConditionalOnProperty("novel.jwt.secret") @Component @Slf4j public class JwtUtils { /** * 注入JWT加密密钥 */ @Value("${novel.jwt.secret}") private String secret; /** * 定义系统标识头常量 */ private static final String HEADER_SYSTEM_KEY = "systemKeyHeader"; /** * 根据用户ID生成JWT * * @param uid 用户ID * @param systemKey 系统标识 * @return JWT */ public String generateToken(Long uid, String systemKey) { long nowMillis = System.currentTimeMillis(); long expMillis = nowMillis + 60 * 60 * 1000; return Jwts.builder() .setHeaderParam(HEADER_SYSTEM_KEY, systemKey) .setSubject(uid.toString()) // .setExpiration(new Date(expMillis)) .signWith(Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8))) .compact(); } /** * 解析JWT返回用户ID * * @param token JWT * @param systemKey 系统标识 * @return 用户ID */ public Long parseToken(String token, String systemKey) { Jws<Claims> claimsJws; try { claimsJws = Jwts.parserBuilder() .setSigningKey(Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8))) .build() .parseClaimsJws(token); // OK, we can trust this JWT // 判断该 JWT 是否属于指定系统 if (Objects.equals(claimsJws.getHeader().get(HEADER_SYSTEM_KEY), systemKey)) { return Long.parseLong(claimsJws.getBody().getSubject()); } } catch (JwtException e) { log.warn("JWT解析失败:{}", token); // don't trust the JWT! } return null; } }
本文作者:xiaoovo
本文链接:https://www.cnblogs.com/xiaoovo/p/18142098
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2022-04-18 String,StringBuilder,StringBuffer效率比较