39 lines
1.3 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|