-
Notifications
You must be signed in to change notification settings - Fork 4
Auditing
je-pa edited this page Mar 25, 2025
·
2 revisions
- 공통 모듈에서
@EnableJpaAuditing와AuditorAware를 활용하여 감사를 진행
package com.common.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@Configuration
@EnableJpaAuditing
public class JpaAuditingConfig {
}package com.common.domain;
import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;
import org.springframework.data.domain.AuditorAware;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@Component
public class AuditorAwareImpl implements AuditorAware<Long> {
@Override
public Optional<Long> getCurrentAuditor() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes != null) {
HttpServletRequest request = attributes.getRequest();
String userId = request.getHeader("X-User-Id");
if (userId != null) {
try {
return Optional.of(Long.valueOf(userId));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
}
return Optional.empty();
}
}package com.common.domain;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity implements Serializable {
@CreatedBy
@Column(updatable = false)
private Long createdBy;
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedBy
private Long updatedBy;
@LastModifiedDate
private LocalDateTime updatedAt;
private Long deletedBy;
private LocalDateTime deletedAt;
public void delete(LocalDateTime deleteAt, Long deletedBy) {
this.deletedAt = deleteAt;
this.deletedBy = deletedBy;
}
public void createdBy(Long createdBy) {
this.createdBy = createdBy;
}
}