Kiểm Toán Là Gì?
Kiểm toán là quá trình ghi lại ai đã thay đổi cái gì và khi nào trong ứng dụng của bạn. Điều này đặc biệt quan trọng trong các ứng dụng doanh nghiệp để đảm bảo an ninh dữ liệu, khả năng truy xuất và tuân thủ quy định.
Các Công Cụ Kiểm Toán Trong Java:
- Trong Java, việc kiểm toán có thể đạt được bằng nhiều cách. Các framework như Hibernate, Spring Data JPA hoặc các thư viện cụ thể như Envers có thể giúp đơn giản hóa quá trình kiểm toán.
- Hibernate Envers thường được sử dụng để kiểm toán. Nó cho phép bạn tự động lưu các phiên bản của dữ liệu trong một bảng riêng biệt, ghi lại các thay đổi đối với các thực thể và lưu trữ các giá trị cũ.
Ví Dụ Kiểm Toán Với Spring Data JPA:
Người Nghe Thực Thể: Spring Data JPA cung cấp cách để tự động kiểm toán các thực thể bằng cách sử dụng các người nghe (listeners) kích hoạt trong các sự kiện vòng đời nhất định (@PrePersist, @PreUpdate, v.v.). Bạn có thể tạo một lớp cơ sở để quản lý các trường kiểm toán như createdBy, createdDate, modifiedBy và modifiedDate:
java
@MappedSuperclass
public abstract class Auditable {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
// getters và setters
}
Sau đó, bạn chú thích các lớp thực thể của bạn với @EntityListeners để tự động theo dõi các thay đổi:
java
@Entity
@EntityListeners(AuditingEntityListener.class)
public class User extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// các trường khác, getters và setters
}
Để kích hoạt tính năng kiểm toán, bạn sẽ cần cấu hình Spring Boot trong lớp @Configuration:
java
@Configuration
@EnableJpaAuditing
public class JpaConfig {
}
Logic Kiểm Toán Tùy Chỉnh:
Bạn cũng có thể triển khai logic tùy chỉnh để ghi lại dữ liệu kiểm toán cụ thể. Ví dụ, bạn có thể muốn theo dõi các thay đổi được thực hiện bởi một người dùng cụ thể. Điều này có thể được thực hiện bằng cách lưu trữ thông tin kiểm toán trong một bảng kiểm toán.
java
@Entity
public class AuditLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String action;
private String entityName;
private Long entityId;
private String userName;
private LocalDateTime timestamp;
}
Sau đó, bạn có thể tạo một dịch vụ ghi lại các hành động này khi có thay đổi xảy ra:
java
public void audit(String action, String entityName, Long entityId, String userName) {
AuditLog auditLog = new AuditLog();
auditLog.setAction(action);
auditLog.setEntityName(entityName);
auditLog.setEntityId(entityId);
auditLog.setUserName(userName);
auditLog.setTimestamp(LocalDateTime.now());
auditLogRepository.save(auditLog);
}
- Các Trường Kiểm Toán: Các trường chung mà bạn có thể muốn ghi lại trong kiểm toán bao gồm:
- createdBy: Ai đã tạo bản ghi.
- createdDate: Khi nào bản ghi được tạo.
- modifiedBy: Ai đã sửa đổi bản ghi.
- modifiedDate: Khi nào bản ghi được sửa đổi lần cuối.
- action: Hành động nào đã được thực hiện (tạo, cập nhật, xóa).
- oldValue, newValue: Theo dõi giá trị trước và sau của các trường (trong trường hợp cập nhật).
source: viblo