본문 바로가기

개발/스프링 프레임워크

[Spring Boot] JPA, AuditorAware 사용하여 사용자정보 자동 입력

1. Config 생성

@EnableJpaAuditing 어노테이션을 추가하여 Annotation 을 사용하여  Audit 활성화

@Configuration
@EnableJpaAuditing
public class JpaAuditConfig {

    @Bean
    public AuditorAware<Long> auditorProvider() {
        return new AuditorAwareImpl();
    }

}

 

2. AuditorAware 구현체 생성 

getCurrentAuditor() 를 구현하여 등록자, 수정자에 사용될 사용자 정보를 불러온 후 리턴한다. 

public class AuditorAwareImpl implements AuditorAware<Long> {

    @Override
    public Optional<Long> getCurrentAuditor() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        if(null == authentication || !authentication.isAuthenticated()) {
            return null;
        }

		//사용자 환경에 맞게 로그인한 사용자의 정보를 불러온다. 
        CustomUserDetails userDetails = (CustomUserDetails)authentication.getPrincipal();

        return Optional.of(userDetails.getId());
    }

}

 

3. BaseEntity 생성

@MappedSuperclass 어노테이션을 추가하여 공통 매핑정보 라는것을 정의한다. 

@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public abstract class BaseEntity {

    //등록일
    @CreatedDate
    @Column(updatable = false)
    protected LocalDateTime createDate;

    //수정일
    @LastModifiedDate
    protected LocalDateTime lastModifedDate;

    //등록자
    @CreatedBy
    @Column(updatable = false)
    protected Long createBy;

    //수정자
    @LastModifiedBy
    protected Long lastModifedBy;

}

 

4. Sample Entity 생성

BaseEntity 를 상속받는 Entity 를 생성한다.

@Entity
@Table(name="board")
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SampleBoard extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String content;

}

 

 

모든 설정이 끝나고 테스트를 해보면 BaseEntity 에 정의한 컬럼에 값이 자동으로 입력된것을 확인할 수 있다.