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에 아래와 같이 변경됨을 확인할 수 있다.