728x90
반응형
💡 이전 내용
지난 글에서 게시글 작성 기능과 로그인 기능을 구현하였습니다.
이번글에서는 JPA Auditing 을 활용하여 게시글을 누가 작성했는지에 대한 정보를 저장하겠습니다.
작성자 정보를 저장하여 추후 작성자만 게시글을 수정하거나 삭제하는 기능을 구현하겠습니다.
📖 개념 정리
1. Auditing
Auditing를 활용하면 엔티티를 생성하거나 변경한 사람, 발생시점을 추적할 수 있습니다.
💻 구현
1. JPA Auditing 활성화 하기
@SpringBootApplication
@EnableJpaAuditing
@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)
public class BoardApplication {
public static void main(String[] args) {
SpringApplication.run(BoardApplication.class, args);
}
}
2. Base Entity 생성
모든 엔티티에 공통으로 적용하기 위해 Base Entity를 생성하겠습니다.
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Data
public abstract class BaseEntity {
@CreatedDate
@Column(name = "created_date", updatable = false)
protected LocalDateTime createdDate;
@CreatedBy
@Column(name = "created_by", updatable = false, columnDefinition = "nvarchar(4000)")
protected String createdBy;
@LastModifiedDate
protected LocalDateTime lastModifiedDate;
@LastModifiedBy
@Column(name = "last_modified_by", columnDefinition = "nvarchar(4000)")
protected String lastModifiedBy;
}
- Base Entity는 단독으로 사용하지 않고, 다른 엔티티에서 상속을 받아 사용하기 위해 추상클래스로 생성하였습니다.
- @MappedSuperclass 를 부모 클래스에 선언하면, 자식 클래스에서 부모의 속성을 상속받아 사용할 수 있습니다.
- @EntityListeners를 선언하여 Persist, Remove, Update, Load에 대한 이벤트 발생 전, 후에 Auditing Listener를 콜백하도록 하였습니다.
- @CreatedDate, @CreatedBy, @LastModifiedDate, @LastModifiedBy 어노테이션을
생성일자, 생성자, 마지막 수정일자, 마지막 수정자 칼럼에 각각 매핑해줍니다.
3. 로그인한 사용자 정보 등록
AuditorAware 를 구현하여 로그인한 사용자의 정보를 받아옵니다.
여기서 받아온 사용자 정보는 @CreatedBy 와 @LastModifiedBy에 자동으로 매핑됩니다.
@Component
public class CustomAuditorAware implements AuditorAware<By> {
@Override
public Optional<By> getCurrentAuditor() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if(ObjectUtils.isEmpty(authentication) || !(authentication.getPrincipal() instanceof UserDetails)) {
return Optional.empty();
} else {
CustomUserDetails customUserDetails = (CustomUserDetails) authentication.getPrincipal();
return Optional.of(customUserDetails.getUsername());
}
}
}
4. BaseEntity 상속
Audit 기능을 사용할 엔티티에 상속받습니다.
@Getter
@NoArgsConstructor
@Entity
public class Board extends BaseEntity {
...
}
참고 사이트
1. https://docs.spring.io/spring-data/jpa/docs/1.7.0.DATAJPA-580-SNAPSHOT/reference/html/auditing.html
2. https://mia-dahae.tistory.com/150
728x90
반응형
'Web 개발 > 게시판 만들기' 카테고리의 다른 글
[JPA/Thymeleaf] 게시글 작성자만 수정하게 하기(2) (0) | 2022.09.04 |
---|---|
[Spring Security/Thymeleaf] 로그인 기능 구현 (4) Role 설정 (0) | 2022.08.30 |
[Spring Security] 로그인 기능 구현 (3) 회원 가입 기능 (0) | 2022.08.27 |
[Spring Security] 로그인 기능 구현 (3) 로그인 기능 확장 (0) | 2022.08.26 |
[Spring Security] 로그인 기능 구현 (1) Spring Security Authentication (0) | 2022.08.25 |