Skip to content

Auditing

je-pa edited this page Mar 25, 2025 · 2 revisions
  • 공통 모듈에서 @EnableJpaAuditingAuditorAware를 활용하여 감사를 진행
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;
  }
}

Clone this wiki locally