zhangback
2026-03-10 92052d1fa583816a92ac7a070aa17a62b96fa605
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
package com.ruoyi.api.third.util;
 
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
 
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
 
/**
 * 第三方API认证工具
 */
@Component
public class ApiAuthUtil {
 
    private static final Logger logger = LoggerFactory.getLogger(ApiAuthUtil.class);
 
    @Value("${api.third.appid:}")
    private String validAppId;
 
    @Value("${api.third.secret:}")
    private String validSecret;
 
    /**
     * 验证请求的appid和secret
     *
     * @param request HTTP请求
     * @return 是否验证通过
     */
    public boolean validateAppAuth(HttpServletRequest request) {
        String appId = getAppId(request);
        String secret = getSecret(request);
 
        if (StringUtils.isEmpty(appId) || StringUtils.isEmpty(secret)) {
            logger.warn("缺少appId或secret参数");
            return false;
        }
 
        // 从配置中获取有效的appid和secret
        if (StringUtils.isEmpty(validAppId) || StringUtils.isEmpty(validSecret)) {
            logger.error("系统未配置有效的appid和secret");
            return false;
        }
 
        boolean valid = appId.equals(validAppId) && secret.equals(validSecret);
 
        if (!valid) {
            logger.warn("appId或secret验证失败: appId={}, secret=***", appId);
        }
 
        return valid;
    }
 
    /**
     * 获取appId (从请求头或请求参数)
     */
    public String getAppId(HttpServletRequest request) {
        String appId = request.getHeader("X-AppId");
        if (StringUtils.isEmpty(appId)) {
            appId = request.getParameter("appId");
        }
        return appId;
    }
 
    /**
     * 获取secret (从请求头或请求参数)
     */
    public String getSecret(HttpServletRequest request) {
        String secret = request.getHeader("X-Secret");
        if (StringUtils.isEmpty(secret)) {
            secret = request.getParameter("secret");
        }
        return secret;
    }
 
    /**
     * 获取未授权的响应
     */
    public AjaxResult getUnauthorizedResult() {
        return AjaxResult.error(401, "appId或secret验证失败,请检查凭证");
    }
}