고객이 스프링 설정 파일 암호화를 해달라는 요청을 했습니다.어찌해야하나 막막하기만 하고 답답하던 때에 구글신이 도움을 줘서 http://www.jasypt.org 사이트를 알게 되었습니다. 간단히 암호화를 할 수 있었습니다.
기존 스프링 설정 파일
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="${test.url}"/> <property name="username" value="${test.username}"/> <property name="password" value="${test.password}"/> </bean>
암호화 적용후 설정 파일
<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> <property name="config" ref="environmentVariablesConfiguration" /> <property name="password" value="test" /> </bean> <bean id="propertyConfigurer" class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer"> <constructor-arg ref="configurationEncryptor" /> <property name="locations"> <list>
스프링 파일에 URL, USERNAME, PASSWORD를 뺐습니다.그렇다면 계정정보는 어딘가에 넣어야 하는데 그게 test.properties 파일입니다. test.properties파일은 WEB-INF 디렉토리 아래 위치 하게 파일을 생성 합니다.
그리고 test.properties 파일에 아래 처럼 입력합니다.
test.url = test.username = test.password =
이제 properties의 키값을 입력 했습니다. 입력한 키값과 스프링 설정 파일에 넣은 값이 동일 해야 합니다. ${test.url} = test.url 이런식으로요.
그럼 properties 의 value 를 채워야 하는데 value를 채우기 위해서는 암호화된 값이 필요 합니다. 심플하게 메인 클래스를 만들어서 채워보겠습니다.
TestMain.java
public static void main(String[] args) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setPassword("test"); // XML에서 설정한 비밀번호와 동일하게 String url = encryptor.encrypt("jdbc:oracle:thin:@127.0.0.1:1521:XE"); System.out.println("test.url="+url); String username = encryptor.encrypt("test"); System.out.println("test.username="+username); String passwordresult = encryptor.encrypt("test123"); System.out.println("test.password="+passwordresult); }
나온 결과값을 properties 파일 value에 채워 놓으면 됩니다. 주의할 점은 value에 채워놓으실때 ENC(암호화된 접속 정보) 로 해야 합니다.
가장 중요한 라이브러리 파일을 넣으셨을 꺼라 생각되어 생략 했습니다.