yangys
2024-03-27 44028c2d1a7f21da831cb07ecb1b4a7873d8627b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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<String, Object> redisTemplate;
 
    public static JwtProperties getJwtProperties() {
        return jwtProperties;
    }
 
    public static void setJwtProperties(JwtProperties properties) {
        if (jwtProperties == null) {
            jwtProperties = properties;
        }
    }
 
    public static RedisTemplate<String, Object> getRedisTemplate() {
        return redisTemplate;
    }
 
    public static void setRedisTemplate(RedisTemplate<String, Object> 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);
    }
}