CreatedBy, LastModifiedBy 기능 구현

이민지·2021년 12월 17일
0

JPA Auditing 기능과 @CreatedBy, @LastModifiedBy 를 사용하여, 데이터가 생성되거나 수정될 때 유저의 ID가 DB에 저장되게 기능을 구현했다.

우선 BaseTimeEntity에 @CreatedBy와 @LastModifiedBy를 추가해줬다.

User의 ID를 JPA에서 인식하려면, AuditorAware을 구현한 클래스가 필요하다.

아래와 같이 LoginUserAuditorAware 클래스를 만들어서 Long Type의 UserId를 반환하도록 했다. 유저 정보는 세션에서 가져오고, 없을 경우 null을 반환한다.

import com.jojoldu.book.springboot.config.auth.dto.SessionUser;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.AuditorAware;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpSession;
import java.util.Optional;

@RequiredArgsConstructor
@Component
public class LoginUserAuditorAware implements AuditorAware<Long> {

    private final HttpSession httpSession;

    @Override
    public Optional<Long> getCurrentAuditor() {
        SessionUser user = (SessionUser) httpSession.getAttribute("user");
        if(user == null)
            return null;

        return Optional.ofNullable(user.getId());
    }
}

세션의 유저 정보에서 ID를 가져오기 위해, SessionUser에 id를 추가하였다.

생성하고 수정하면 DB에 아래와 같이 변경됨을 확인할 수 있다.

0개의 댓글