요르딩딩

[Personal_Project] globals.properties 암복호화 적용 본문

[Personal_Project]

[Personal_Project] globals.properties 암복호화 적용

요르딩딩 2021. 8. 27. 13:44
728x90
반응형

이번시간에서 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 메소드를 사용하여 값을 가져와 확인해볼 수 있습니다.

 

[결과]

728x90
반응형
Comments