刘帅
2026-09-08 c438598b641e52a458c7e64519284913db5b5967
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
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);
        }
    }
}