- 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

+ Recent posts