package com.dsh.other.audit; import com.dsh.other.entity.SysAccountAuditLog; import com.dsh.other.service.SysAccountAuditLogService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** 自动记录所有对其他服务的账号使用和关键操作,审计异常不影响业务。 */ @Slf4j @Component public class AccountAuditInterceptor implements HandlerInterceptor { @Resource private SysAccountAuditLogService auditLogService; @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { if (request.getRequestURI().startsWith("/internal/audit-logs")) return; try { SysAccountAuditLog auditLog = AuditLogSupport.fromRequest(request); auditLog.setResult(ex == null && response.getStatus() < 400 ? "SUCCESS" : "FAIL"); auditLog.setErrorMessage(ex == null ? null : AuditLogSupport.maskText(ex.getMessage())); auditLogService.append(auditLog); } catch (Exception auditException) { log.error("账号审计日志写入失败, uri={}", request.getRequestURI(), auditException); } } }