wzp
2025-09-03 73d7f7aed91cdaaaf61e6177dc02c71ef5ca51e8
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysClientAppServiceImpl.java
@@ -8,6 +8,8 @@
import com.ruoyi.system.service.ISysClientAppService;
import com.ruoyi.common.utils.SecurityUtils;
import static com.ruoyi.common.utils.SecurityUtils.md5;
/**
 * 客户应用配置 服务层实现
 */
@@ -25,6 +27,18 @@
    @Override
    public SysClientApp selectSysClientAppByAppId(Long appId) {
        return sysClientAppMapper.selectSysClientAppByAppId(appId);
    }
    /**
     * 通过应用标识查询客户应用配置
     *
     * @param appKey 应用标识
     * @return 客户应用配置
     */
    @Override
    public SysClientApp selectSysClientAppByAppKey(String appKey)
    {
        return sysClientAppMapper.selectSysClientAppByAppKey(appKey);
    }
    /**
@@ -118,4 +132,53 @@
    public int deleteSysClientAppByAppId(Long appId) {
        return sysClientAppMapper.deleteSysClientAppByAppId(appId);
    }
    @Override
    public boolean validateSign(String appId, String sign, String timestamp) {
        // 根据appId获取应用信息
        SysClientApp clientApp = sysClientAppMapper.selectSysClientAppByAppKey(appId);
        if (clientApp == null) {
            System.out.println("未找到appId为 " + appId + " 的应用配置");
            return false;
        }
        System.out.println("找到应用配置: " + clientApp);
        // 验证应用是否有效
        if (!"0".equals(clientApp.getStatus())) {
            System.out.println("应用状态无效: " + clientApp.getStatus());
            return false;
        }
        // 验证有效期
        if (clientApp.getValidStartTime() != null && clientApp.getValidEndTime() != null) {
            long currentTime = System.currentTimeMillis();
            if (currentTime < clientApp.getValidStartTime().getTime()
                || currentTime > clientApp.getValidEndTime().getTime()) {
                System.out.println("应用已过期");
                return false;
            }
        }
        // 生成签名
        String serverSign = generateSign(appId, clientApp.getSecurityKey(), timestamp);
        System.out.println("服务器生成的签名: " + serverSign);
        System.out.println("客户端提供的签名: " + sign);
        System.out.println("签名是否匹配: " + sign.equals(serverSign));
        // 比较签名
        return sign.equals(serverSign);
    }
    /**
     * 生成签名
     * 签名规则:MD5(appId + timestamp + securityKey)
     */
    private String generateSign(String appId, String securityKey, String timestamp) {
        String signStr = appId + timestamp + securityKey;
        System.out.println("签名原始字符串: " + signStr);
        String result = md5(signStr);
        System.out.println("MD5结果: " + result);
        return result;
    }