요르딩딩
[Personal_Project] globals.properties 암복호화 적용 본문
이번시간에서 globals.properties에 값을 암호화하여 저장하고, 복호화한 값을 로직에서 사용할 수 있는 기능을 구현해보겠습니다.
[순서]
1. globals.properties의 원하는 변수 값을 암호화합니다.
2. globals.properties의 원하는 변수에 암호화한 값을 ENC(암호화한 값) 형태로 넣어줍니다.
3. resources > config > spring > context-common.xml에 복호화가 가능하도록 bean설정을 추가하여줍니다.
4. 실행하고자하는 로직에 context-common.xml에서 생성한 bean을 @Autowired로 가져와 사용하면 됩니다.
위의 순서대로 진행을 해보겠습니다.
1. globals.properties의 원하는 변수 값을 암호화합니다.
https://hyeounstory.tistory.com/108
위 링크를 참고하여 암호화 값을 구합니다.
sh encrypt.sh input=abcd password=test algorithm=PBEWithMD5AndDES
2. globals.properties의 원하는 변수에 암호화한 값을 ENC(암호화한 값) 형태로 넣어줍니다.
위에서 암호화한 값을 resource-dev > conf > globals.properties에 추가하여줍니다.
이때 암호화한 값이므로 ENC(암호화한 값) 형태로 넣어주어야합니다.
3. resources > config > spring > context-common.xml에 복호화가 가능하도록 bean설정을 추가하여줍니다.
1번에서 적용한 password와 algorithm의 값을 동일하게 아래의 사진과 같이 넣어줍니다.
그리고 EncryptablePropertiesPropertySource기능을 사용하기 위해 id=propertySource의 Bean을 생성 및 설정을 합니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<!-- component-scan 설정
<context:component-scan base-package="com">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
-->
<bean id="encryptorConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<!-- <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" /> -->
</bean>
<bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config" ref="encryptorConfig" />
<property name="password" value="test" />
</bean>
<!-- 환경설정 기본정보를 globals.properties 에서 참조하도록 propertyConfigurer 설정 -->
<!-- xml 설정에서 사용. 자바에서는 따로 loader 구현해야함-->
<bean id="propertyConfigurer" class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg ref="encryptor" />
<property name="locations">
<list>
<value>classpath:/conf/globals.properties</value>
<value>classpath:/conf/jdbc.properties</value>
</list>
</property>
</bean>
<!-- java code에서 사용 -->
<util:properties id="properties" location="classpath:/conf/globals.properties"/>
<!-- properties의 암호화문을 복호화 -->
<bean id="propertySource" class="org.jasypt.spring31.properties.EncryptablePropertiesPropertySource">
<constructor-arg index="0" type="java.lang.String" value="encProperties"/>
<constructor-arg index="1" type="java.util.Properties" ref="properties"/>
<constructor-arg index="2" type="org.jasypt.encryption.StringEncryptor" ref="encryptor"/>
</bean>
</beans>
4. 실행하고자하는 로직에 context-common.xml에서 생성한 bean을 @Autowired로 가져와 사용하면 됩니다.
설정파일에서 생성한 EncryptablePropertiesPropertySource 기능을 사용하기위해 import 및 @Autowired을 선언해줍니다.
그리고 .getProperties 메소드를 사용하여 값을 가져와 확인해볼 수 있습니다.
[결과]
'[Personal_Project]' 카테고리의 다른 글
[Personal_Project] globals.properties 적용 (0) | 2021.08.03 |
---|---|
[Personal_Project] 소캣(Client Socket/ Server Socket) (0) | 2021.07.28 |
[Personal_Project] 환경별 배포 패키징 다르게하기(maven, resource, profile, pom.xml, jenkins) (1) | 2021.07.20 |
[Personal_Project] 파일업로드 (단일/다중) (8) (0) | 2021.05.12 |
[Personal_Project] DI (필드, 수정자, 생성자)주입방법 (7) (0) | 2021.05.03 |