fix: 修复 Admin 权限校验与 GET /api/v1/configs 404 问题
This commit is contained in:
@@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取站点最新配置版本列表
|
* 获取站点最新配置版本列表
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,11 @@ public interface ConfigService {
|
|||||||
*/
|
*/
|
||||||
List<SiteConfigDTO> listApprovedConfigs(String siteId);
|
List<SiteConfigDTO> listApprovedConfigs(String siteId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有站点最新已批准配置(供概览统计)
|
||||||
|
*/
|
||||||
|
List<SiteConfigDTO> listAllApprovedConfigs();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取指定版本配置
|
* 获取指定版本配置
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user