刘帅
2026-09-17 45dccc43c06c4fe96c406f24a8da331e7c816971
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
package com.dsh.guns.modular.system.audit;
 
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
 
/** 直连审计服务,刻意不使用 Feign,避免 Sentinel fallback 与审计递归。 */
@Slf4j
@Component
public class ManagementAuditWriter {
    @Resource private DiscoveryClient discoveryClient;
 
    public void append(Map<String, Object> audit) {
        try {
            List<ServiceInstance> instances = discoveryClient.getInstances("mb-cloud-other");
            if (instances == null || instances.isEmpty()) return;
            URL url = new URL(instances.get(0).getUri().toString() + "/internal/audit-logs");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(1000);
            connection.setReadTimeout(1500);
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
            byte[] body = JSON.toJSONString(audit).getBytes(StandardCharsets.UTF_8);
            try (OutputStream output = connection.getOutputStream()) { output.write(body); }
            connection.getResponseCode();
            connection.disconnect();
        } catch (Exception e) {
            log.warn("管理端审计写入失败", e);
        }
    }
}