반응형
Spring Boot에서는 여러 설정값을 application.properties에 입력하여 사용할 수 있다.
Spring보다 편리하고 효율적이다.
하지만 DBMS 사용을 위해서 연결정보를 properties에 입력할 때 평문으로 그냥 삽입하면 정보 유출에 문제가 발생 할 수 있다.
이를 해결하기 위해서 application.properties에서 어떻게 사용하는지 확인해보자.
1. application.properties 내용 암호화하여 입력하기
우선 application.properties에 있는 내용을 암호화 해서 삽입한다. 나는 AES256으로 암호화 하여 삽입하였다.
1 2 | spring.datasource.username=K2amNtg+kL5xK23g7H3Znw== spring.datasource.password=ivWXmtXGN289BY6q9AwRnw== | cs |
2. EnvironmentPostProcessor 구현하기
EnvironmentPostProcessor 인터페이스는 application context가 올라가기전에 application을 커스터마이징 할 수 있게 지원해주는 기능을 제공한다.
postProcessEnvironment 메소드를 구현하여 원하고자 하는 속성값을 변경하여 처리할 수 있다. 이 부분에서 DBMS 연결정보를 다시 복호화 처리하도록 설정하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /** * JDBC 접속 ID 와 Password 암복호화에 사용하기 위해 사용하는 Processor * * @author cjung * @date 2018. 08. 12 * */ public class EncryptionEnvironmentPostProcessor implements EnvironmentPostProcessor { private final Logger logger = LoggerFactory.getLogger(EnvironmentPostProcessor.class); @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { Properties props = new Properties(); try { props.put("spring.datasource.password", AES256Cipher.getInstance().AES_Decode(environment.getProperty("spring.datasource.password"))); props.put("spring.datasource.username", AES256Cipher.getInstance().AES_Decode(environment.getProperty("spring.datasource.username"))); } catch (Exception e) { logger.error("Fail decrypt datasource info", e); } environment.getPropertySources().addFirst(new PropertiesPropertySource("myProps", props)); } } | cs |
3. META-INF/spring.factories 에 클래스 full 경로 기입
EnvironmentPostProcessor를 구현한 클래스가 정상적으로 동작하기 위해서는 classpath에 META-INF/spring.factories 파일을 만들고 해당 클래스의 풀 경로를 기입해주어야한다.
1 2 | # post processor 적용 org.springframework.boot.env.EnvironmentPostProcessor=com.wedul.common.config.EncryptionEnvironmentPostProcessor | cs |
반응형
'web > Spring' 카테고리의 다른 글
Spring Boot Cross Domain 처리 (0) | 2018.10.04 |
---|---|
Facebook Javascript plugin과 spring security를 이용한 페이스북 로그인 (0) | 2018.10.04 |
Spring boot hibernate jpa에서 Auditing 사용 - update, create 시간 자동 변경 (3) | 2018.10.03 |
Spring Validation을 이용해서 요청 검증처리 (0) | 2018.08.09 |
Spring Application Test 정리 (0) | 2018.08.07 |