Integrating Jasypt with Spring 3.0

 

앞선 글에 이어서 JASYPT 라이브러리를 활용하는 소스를 간략이 살펴보도록 하겠다. 적용되는 관련 환경과 툴은 Spring 3.0x 에 Maven 이다.

 

 

1. Maven repository

 

아래 소스와 같이 spring 3.0x 에 맞는 라이브러리가 있다. 그리고 icu4j는 Java 5 SE 이하 버전일 경우에만 추가하고 Java 6 SE 버전 이상일 경우에는 내장된 Normalizer 패키지를 사용하므로 하단의 com.ibm.icu 라이브러리를 추가하지 않는다.

 

 

    <!-- JASYPT: Spring 3.0x Simplified Encryption -->
    <dependency>
        <groupId>org.jasypt</groupId>
        <artifactId>jasypt-spring3</artifactId>
        <version>1.9.0</version>

    </dependency>

    <!-- JASYPT: com.ibm.icu.text.Normalizer -->
    <dependency>
        <groupId>com.ibm.icu</groupId>
        <artifactId>icu4j</artifactId>
        <version>49.1</version>
    </dependency>

 

 

 

2. 원문 가이드

 

Maven Dependency Update를 마치고 자바 프로젝트에 라이브러리가 추가 되었다면 이제 Jasypt 를 사용할 준비가 되었다. 아래 Jasypt 사이트에서 상세한 가이드를 통해 쉽게 적용할 수 있다.

 

http://www.jasypt.org/spring3.html

 

 

 

3. DataSource Configuration (XML)

 

Jasypt + Spring 3.0 가이드를 살펴보면 아래와 같은 코드가 추가 되어 있는 것을 확인 할 수 있다.

일반적인 DataSource 설정이라면 propertyConfigurer와 dataSource 부분만 설정 되어 있다.

 

Jasypt를 적용하게 되면

 - 빈객체가 두개 추가 되었고

 - propertyConfigurer에서 사용되는 Class도 Jasypt에서 제공되는 Class를 활용하도록 한다.

 

 

    <bean id="environmentVariablesConfiguration"

      class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
        <property name="algorithm" value="PBEWithMD5AndDES" />
        <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
    </bean>
 
    <bean id="configurationEncryptor"

      class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
        <property name="config" ref="environmentVariablesConfiguration" />
        <property name="password" value="jasyptPass" />
    </bean>

 

    <bean id="propertyConfigurer"

class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">
        <constructor-arg ref="configurationEncryptor" />
        <property name="locations">
            <list>
                <value>classpath:properties/jdbc.properties</value>
            </list>
        </property>
    </bean>

 

    <!-- DataSource Configuration -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

      destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>

        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

 

        .

        .

        .

 

    </bean>

 

 

 

4. jdbc.properties 파일값 암호화

 

PBE방식으로 암호화해서 암호화 값을 properties에 대입하도록 한다.

http://www.jasypt.org/api/jasypt/1.8/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html

 

StandardPBEStringEncryptor Class를 활용한 값 암호화

 

    StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
    pbeEnc.setPassword("jasyptPass"); // PBE 값(XML PASSWORD설정)

 

    String url = pbeEnc.encrypt("jdbc:oracle:thin:@x.x.x.x:1521:xxxxx");
    String username = pbeEnc.encrypt("xxxxx");
    String password = pbeEnc.encrypt("xxxxx");

 

    System.out.println(url);
    System.out.println(username);
    System.out.println(password);

 

 

jdbc.properties 값대입 예시

 

    jdbc.driverClassName=core.log.jdbc.driver.OracleDriver
    jdbc.url=ENC(bga9c867hgFkE4ALozTBqBWj2C5wPxH8kDa//7Pqlm8DpGbFK6Fod)
    jdbc.username=ENC(6gaEuIet0A4zRztWpUkS5w==)
    jdbc.password=ENC(XR7FHiFzSBhGT+uIYZJO6w==) 

 

 

이때 유의할 점은 ENC를 빼고 값을 대입하면 Jasypt에서 일반 문자열로 인식을 하게 되므로 암호화한 문자열 값 앞에 ENC로 감싸도록 한다.

 

 

감사합니다 :)

Posted by 리트모스
: