Files
baiyue-firstleg/common-audit/src/main/java/com/baiyue/common/audit/HttpAuditSink.java
T
2026-08-05 14:20:04 +08:00

39 lines
1.3 KiB
Java

package com.baiyue.common.audit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.client.RestClient;
/**
* HTTP 审计输出实现,将结构化业务审计事件发送到独立审计服务。
*/
public class HttpAuditSink implements AuditSink {
public static final String INTERNAL_SERVICE_TOKEN_HEADER = "X-Internal-Service-Token";
private static final Logger auditLog = LoggerFactory.getLogger("BAIYUE_AUDIT");
private final RestClient client;
private final String endpoint;
private final String internalServiceToken;
public HttpAuditSink(RestClient.Builder builder, String endpoint, String internalServiceToken) {
this.client = builder.build();
this.endpoint = endpoint;
this.internalServiceToken = internalServiceToken;
}
@Override
public void publish(AuditEvent event) {
try {
client.post()
.uri(endpoint)
.header(INTERNAL_SERVICE_TOKEN_HEADER, internalServiceToken)
.body(event)
.retrieve()
.toBodilessEntity();
}
catch (RuntimeException ex) {
auditLog.warn("deliveryFailed errorType={} errorMessage={} audit={}",
ex.getClass().getSimpleName(), ex.getMessage(), event);
}
}
}