TIL
[TIL] 2025.01.03 - 서버 실행 시 관리자 Default 관리자 계정 생성하기
전영호
2025. 1. 3. 17:10
- TIL -
구현 목표)
타임리프를 사용해서 간단하게 회원을 관리할 수 있는 백오피스 페이지를 구현하고 있는데 이때 관리자를 토큰 값을 기준으로 판별하는 코드가 추가되었다.
이 코드를 테스트하기 위해 미리 관리자를 생성할 필요가 있었고 서버 실행 시점에 초기화 작업을 위해 사용되는 @PostContruct 어노테이션을 활용해서 기본 admin 계정을 생성해보고자 했다.
구현 코드)
package com.randomchat.main.service;
import com.randomchat.main.domain.users.Users;
import com.randomchat.main.repository.users.UsersRepository;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
public class CreateDefaultAdmin {
private final BCryptPasswordEncoder bCryptPasswordEncoder;
private final UsersRepository usersRepository;
@PostConstruct
public void createDefaultAdmin() {
// 관리자 계정이 존재하는 경우 관리자 계정 생성을 패스
if(usersRepository.findByEmail("admin").isPresent()) return;
String email = "admin";
String password = bCryptPasswordEncoder.encode("admin");
String nickname = "admin";
Users user = new Users();
Users admin = user.createAdmin(email, password, nickname);
usersRepository.save(admin);
}
}
CreateDefaultAdmin.class 를 생성하여 컴포넌트로 선언
createDefaultAdmin() 메소드를 생성하여 @PostConstruct 어노테이션을 붙여줌으로써 CreateDefaultAdmin 빈이 초기화 되고 의존성 주입이 완료된 시점에 해당 메소드를 실행하게 설정
서버 실행 시 시작되는 코드이므로 admin 계정이 이미 존재하는 경우(서버를 재부팅하거나 재배포하는 과정) 관리자 계정을 생성하지 않고 넘어가게끔 if 문을 사용해서 관리
728x90