要捕获所有的审计日志并记录任何CRUD操作,您可以使用Spring AOP(面向切面编程)和自定义注解来实现。以下是一个使用Spring Boot的示例代码:
首先,创建一个自定义注解 @Auditable
,用于标记需要进行审计的方法:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Auditable {
}
然后,创建一个切面类 AuditAspect
,用于在被 @Auditable
注解标记的方法执行前后进行日志记录:
@Aspect
@Component
public class AuditAspect {
private Logger logger = LoggerFactory.getLogger(AuditAspect.class);
@Before("@annotation(com.example.demo.Auditable)")
public void beforeAudit(JoinPoint joinPoint) {
// 在方法执行前记录日志
logger.info("Before executing method: {}", joinPoint.getSignature().getName());
}
@AfterReturning("@annotation(com.example.demo.Auditable)")
public void afterAudit(JoinPoint joinPoint) {
// 在方法成功执行后记录日志
logger.info("After executing method: {}", joinPoint.getSignature().getName());
}
}
接下来,在需要进行审计的Rest控制器的方法上添加 @Auditable
注解:
@RestController
public class UserController {
@Autowired
private UserService userService;
@Auditable
@PostMapping("/users")
public ResponseEntity> createUser(@RequestBody User user) {
userService.createUser(user);
return ResponseEntity.ok().build();
}
@Auditable
@GetMapping("/users/{id}")
public ResponseEntity getUser(@PathVariable Long id) {
User user = userService.getUser(id);
return ResponseEntity.ok(user);
}
// 其他CRUD方法同样添加 @Auditable 注解
// ...
}
最后,启动应用程序,当您调用标记了 @Auditable
注解的Rest控制器的方法时,将会在控制台输出相应的审计日志。
请注意,上述示例假设您已经使用了Spring Boot、Spring AOP和Slf4j日志框架。您可能需要根据您的实际项目配置进行适当的调整。