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);
|
}
|
}
|
}
|