Skip to content

Commit e68f1ff

Browse files
committed
fix: 添加任务结果上传接口的认证拦截逻辑
1 parent 1f0451a commit e68f1ff

5 files changed

Lines changed: 52 additions & 1 deletion

File tree

win-diag-doctor-app/src/main/java/cn/teacy/wdd/config/GeneralConfig.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import cn.teacy.wdd.common.interfaces.TaskIdGenerator;
44
import cn.teacy.wdd.config.interceptor.ProbeContextInterceptor;
5+
import cn.teacy.wdd.config.interceptor.TaskResultAuthInterceptor;
56
import cn.teacy.wdd.protocol.WsMessageMapper;
67
import cn.teacy.wdd.protocol.WsProtocolHandlerRegistry;
78
import cn.teacy.wdd.support.ProbeContext;
@@ -53,6 +54,9 @@ public void addInterceptors(@NonNull InterceptorRegistry registry) {
5354
registry.addInterceptor(new ProbeContextInterceptor(probeContext))
5455
.addPathPatterns("/chatui/index.html")
5556
.addPathPatterns("/run_sse");
57+
58+
registry.addInterceptor(new TaskResultAuthInterceptor())
59+
.addPathPatterns("/task_result/**");
5660
}
5761

5862
@Bean

win-diag-doctor-app/src/main/java/cn/teacy/wdd/config/interceptor/ProbeContextInterceptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import org.springframework.web.servlet.HandlerInterceptor;
1010
import org.springframework.web.util.UriComponentsBuilder;
1111

12+
import static cn.teacy.wdd.common.constants.ProbeConstants.PROBE_ID_HEADER;
13+
1214
@Slf4j
1315
@RequiredArgsConstructor
1416
public class ProbeContextInterceptor implements HandlerInterceptor {
@@ -23,7 +25,7 @@ public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServl
2325

2426
// 尝试从 Header 获取
2527
if (probeId == null || probeId.isBlank()) {
26-
probeId = request.getHeader("X-Probe-ID");
28+
probeId = request.getHeader(PROBE_ID_HEADER);
2729
}
2830

2931
// 从 Referer 获取
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package cn.teacy.wdd.config.interceptor;
2+
3+
import jakarta.servlet.http.HttpServletRequest;
4+
import jakarta.servlet.http.HttpServletResponse;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.apache.commons.codec.digest.DigestUtils;
7+
import org.springframework.beans.factory.annotation.Value;
8+
import org.springframework.lang.NonNull;
9+
import org.springframework.web.servlet.HandlerInterceptor;
10+
11+
import java.util.Objects;
12+
13+
import static cn.teacy.wdd.common.constants.ProbeConstants.PROBE_ID_HEADER;
14+
15+
@Slf4j
16+
public class TaskResultAuthInterceptor implements HandlerInterceptor {
17+
18+
@Value("${wdd.probe.connect-key}")
19+
private String probeConnectKey;
20+
21+
@Override
22+
public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler) {
23+
24+
String probeId = request.getHeader(PROBE_ID_HEADER);
25+
26+
String authHeader = request.getHeader("Authorization");
27+
28+
log.debug("Authenticating task result callback: probeId={}, Authorization={}", probeId, authHeader);
29+
30+
if (Objects.nonNull(authHeader) && authHeader.equals("Bearer " + DigestUtils.md5Hex(probeConnectKey + probeId))) {
31+
return true;
32+
} else {
33+
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
34+
log.warn("Unauthorized access attempt for probeId={}", probeId);
35+
return false;
36+
}
37+
}
38+
39+
}

win-diag-doctor-common/src/main/java/cn/teacy/wdd/common/constants/ProbeConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
public interface ProbeConstants {
44

5+
String PROBE_ID_HEADER = "X-Probe-Id";
6+
57
/**
68
* 探针配置文件名称
79
*/

win-diag-doctor-probe/src/main/java/cn/teacy/wdd/probe/shipper/HttpProbeShipper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import java.net.http.HttpResponse;
1717
import java.time.Duration;
1818

19+
import static cn.teacy.wdd.common.constants.ProbeConstants.PROBE_ID_HEADER;
20+
1921
@Slf4j
2022
@Component
2123
@RequiredArgsConstructor
@@ -33,6 +35,8 @@ public <T> boolean ship(ExecutionResultEndpoint endpoint, TaskExecutionResult<T>
3335
.timeout(Duration.ofMinutes(2))
3436
.header("Content-Type", "application/json")
3537
.header("Accept", "application/json")
38+
.header(PROBE_ID_HEADER, properties.getProbeId())
39+
.header("Authorization", "Bearer " + properties.getProbeSecret())
3640
.POST(HttpRequest.BodyPublishers.ofString(objectMapper.writeValueAsString(
3741
result
3842
))).build();

0 commit comments

Comments
 (0)