반응형

spring boot application.properties custom encryption/decryption.


스프링부트 기본 프라퍼티 자체 암호화 복호화 방법을 공유합니다.


보통 jdbc 의 DB username, password를 암호화하는데 많이 사용됩니다. 


"jdbc 암호화" 라는 키워드로 검색을 해보면 아마 jasypt 오픈 소스를 이용해 암호화하는 내용들이 많이 있을겁니다.


어떤 이유에서든지 jasypt를 이용하지 않고 jdbc 암호화를 하고 싶은 분들에게 이 방법을 공유합니다.



application.properties 의 내용을 복호화하기 위한 소스입니다.

여기서는 spring.datasource.username, spring.datasource.password 이 두가지 항목에 대해서만 명시적으로 불러와서 암호화된 내용을 복호화해서 넘기고 있습니다. application.properties 의 내용은 자체암호화 모듈로 암호화한 내용을 넣어두시면 됩니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
 
import 자체암호화모듈임포트;
 
public class EncryptionEnvironmentPostProcessor implements EnvironmentPostProcessor {
 
  Logger logger = LoggerFactory.getLogger(EncryptionEnvironmentPostProcessor.class);
 
  @Override
  public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
    Properties props = new Properties();
    try {
      props.put("spring.datasource.password", 자체복호화(environment.getProperty("spring.datasource.password")));
      props.put("spring.datasource.username", 자체복호화(environment.getProperty("spring.datasource.username")));
    } catch (Exception e) {
      logger.error("datasource 복호화실패", e);
    }
    environment.getPropertySources().addFirst(new PropertiesPropertySource("myProps", props));
  }
 
}




위의 소스를 적용시키려면 클래스패스 루트에  META-INF/spring.factories를 만들어서 아래처럼 내용을 넣어주시면 됩니다.

# META-INF/spring.factories 
org.springframework.boot.env.EnvironmentPostProcessor=전체패키지.EncryptionEnvironmentPostProcessor




간단하게 DB 아이디, 패스워드를 암호화해서 프라퍼티로 저장할 수 있게 되었습니다.

반응형

+ Recent posts