fix: 修复 Admin 权限校验与 GET /api/v1/configs 404 问题

This commit is contained in:
mediabot-pt
2026-07-07 08:59:39 +08:00
parent a0780c64bb
commit 223528817e
4 changed files with 30 additions and 6 deletions

View File

@@ -47,6 +47,14 @@ public class ConfigController {
return ApiResponse.success(dtos); return ApiResponse.success(dtos);
} }
/**
* 列出所有站点最新已批准配置(供概览统计)
*/
@GetMapping
public ApiResponse<List<SiteConfigDTO>> listAllConfigs() {
return ApiResponse.success(configService.listAllApprovedConfigs());
}
/** /**
* 获取站点最新配置版本列表 * 获取站点最新配置版本列表
*/ */

View File

@@ -46,13 +46,10 @@ public class HmacAuthInterceptor implements HandlerInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 只拦截写入操作(PUT/POST/DELETE/PATCH),GET/HEAD/OPTIONS 直接放行
String method = request.getMethod().toUpperCase(); String method = request.getMethod().toUpperCase();
if ("GET".equals(method) || "HEAD".equals(method) || "OPTIONS".equals(method)) { boolean isWrite = !("GET".equals(method) || "HEAD".equals(method) || "OPTIONS".equals(method));
return true;
}
// 方式 1:Bearer Token // 1. 尝试 Bearer Token 鉴权(读取/写入均尝试,解析成功则写入 trustLevel 供后续 checkAdmin 使用)
String authHeader = request.getHeader("Authorization"); String authHeader = request.getHeader("Authorization");
if (authHeader != null && authHeader.startsWith("Bearer ")) { if (authHeader != null && authHeader.startsWith("Bearer ")) {
String email = verifyBearerToken(authHeader.substring(7)); String email = verifyBearerToken(authHeader.substring(7));
@@ -68,7 +65,7 @@ public class HmacAuthInterceptor implements HandlerInterceptor {
return false; return false;
} }
// 方式 2:PSK 签名(无需账户,clientId 即身份) // 2. PSK 签名鉴权(外部集成客户端,仅用于写入操作)
String sig = request.getHeader(HEADER_SIGNATURE); String sig = request.getHeader(HEADER_SIGNATURE);
String ts = request.getHeader(HEADER_TIMESTAMP); String ts = request.getHeader(HEADER_TIMESTAMP);
if (sig != null && ts != null) { if (sig != null && ts != null) {
@@ -90,6 +87,11 @@ public class HmacAuthInterceptor implements HandlerInterceptor {
return false; return false;
} }
// 3. 读取请求(GET/HEAD/OPTIONS)未携带任何凭证:放行,由具体接口决定是否要求权限
if (!isWrite) {
return true;
}
writeError(response, 401, "Missing or invalid authentication"); writeError(response, 401, "Missing or invalid authentication");
return false; return false;
} }

View File

@@ -25,6 +25,11 @@ public interface ConfigService {
*/ */
List<SiteConfigDTO> listApprovedConfigs(String siteId); List<SiteConfigDTO> listApprovedConfigs(String siteId);
/**
* 获取所有站点最新已批准配置(供概览统计)
*/
List<SiteConfigDTO> listAllApprovedConfigs();
/** /**
* 获取指定版本配置 * 获取指定版本配置
*/ */

View File

@@ -46,6 +46,15 @@ public class ConfigServiceImpl implements ConfigService {
.stream().map(this::toDTO).collect(Collectors.toList()); .stream().map(this::toDTO).collect(Collectors.toList());
} }
@Override
public List<SiteConfigDTO> listAllApprovedConfigs() {
return siteConfigMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<SiteConfig>()
.eq(SiteConfig::getStatus, com.par.core.enums.ConfigStatus.APPROVED)
.eq(SiteConfig::getDeleted, 0))
.stream().map(this::toDTO).collect(Collectors.toList());
}
@Override @Override
public SiteConfig getConfig(String siteId, String version) { public SiteConfig getConfig(String siteId, String version) {
return siteConfigMapper.selectOne( return siteConfigMapper.selectOne(