package com.qianwen.core.jwt; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.concurrent.TimeUnit; import com.qianwen.core.jwt.props.JwtProperties; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.util.StringUtils; /* loaded from: blade-starter-jwt-9.3.0.0-SNAPSHOT.jar:org/springblade/core/jwt/JwtUtil.class */ public class JwtUtil { public static String BEARER = "bearer"; public static Integer AUTH_LENGTH = 7; private static final String REFRESH_TOKEN_CACHE = "blade:refreshToken"; private static final String TOKEN_CACHE = "blade:token"; private static final String TOKEN_KEY = "token:state:"; private static JwtProperties jwtProperties; private static RedisTemplate redisTemplate; public static JwtProperties getJwtProperties() { return jwtProperties; } public static void setJwtProperties(JwtProperties properties) { if (jwtProperties == null) { jwtProperties = properties; } } public static RedisTemplate getRedisTemplate() { return redisTemplate; } public static void setRedisTemplate(RedisTemplate redisTemplate2) { if (redisTemplate == null) { redisTemplate = redisTemplate2; } } public static String getBase64Security() { return Base64.getEncoder().encodeToString(getJwtProperties().getSignKey().getBytes(StandardCharsets.UTF_8)); } public static String getToken(String auth) { if (auth != null && auth.length() > AUTH_LENGTH.intValue()) { String headStr = auth.substring(0, 6).toLowerCase(); if (headStr.compareTo(BEARER) == 0) { auth = auth.substring(7); } return auth; } return null; } public static Claims parseJWT(String jsonWebToken) { try { return (Claims) Jwts.parserBuilder().setSigningKey(Base64.getDecoder().decode(getBase64Security())).build().parseClaimsJws(jsonWebToken).getBody(); } catch (Exception e) { return null; } } public static String getAccessToken(String tenantId, String userId, String accessToken) { return String.valueOf(getRedisTemplate().opsForValue().get(getAccessTokenKey(tenantId, userId, accessToken))); } public static void addAccessToken(String tenantId, String userId, String accessToken, int expire) { getRedisTemplate().delete(getAccessTokenKey(tenantId, userId, accessToken)); getRedisTemplate().opsForValue().set(getAccessTokenKey(tenantId, userId, accessToken), accessToken, expire, TimeUnit.SECONDS); } public static void removeAccessToken(String tenantId, String userId) { removeAccessToken(tenantId, userId, null); } public static void removeAccessToken(String tenantId, String userId, String accessToken) { getRedisTemplate().delete(getAccessTokenKey(tenantId, userId, accessToken)); } public static String getAccessTokenKey(String tenantId, String userId, String accessToken) { String key = tenantId.concat(":").concat(TOKEN_CACHE).concat("::").concat(TOKEN_KEY); if (getJwtProperties().getSingle().booleanValue() || StringUtils.isEmpty(accessToken)) { return key.concat(userId); } return key.concat(accessToken); } public static String getRefreshToken(String tenantId, String userId, String refreshToken) { return String.valueOf(getRedisTemplate().opsForValue().get(getRefreshTokenKey(tenantId, userId))); } public static void addRefreshToken(String tenantId, String userId, String refreshToken, int expire) { getRedisTemplate().delete(getRefreshTokenKey(tenantId, userId)); getRedisTemplate().opsForValue().set(getRefreshTokenKey(tenantId, userId), refreshToken, expire, TimeUnit.SECONDS); } public static void removeRefreshToken(String tenantId, String userId) { getRedisTemplate().delete(getRefreshTokenKey(tenantId, userId)); } public static String getRefreshTokenKey(String tenantId, String userId) { return tenantId.concat(":").concat(REFRESH_TOKEN_CACHE).concat("::").concat(TOKEN_KEY).concat(userId); } }