태그 보관물: spring

Spring DataSource 변경

아주 많은 경우는 아니지만 사용자 정보 혹은 조직 정보를 저장하는 데이터베이스의 계정 및 IP 정보를 변경하는 경우가 있습니다.
스프링에서는 프로세스가 구동될 때 Bean을 생성해서 관리하기 때문에 변경하기가 쉽지 않습니다. 그냥 간단하게 사용자가 입력한 데이터베이스 접속 정보로 변경하는 부분을 보겠습니다.

스프링 설정 파일
dataSource.xml

<bean id="dataSource" 

        class="org.apache.commons.dbcp.BasicDataSource" 

Picasa Content
destroy-method="close">

    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>

    <property name="url" value="jdbc:mysql://localhost:3306/Coopzl"/>

    <property name="username" value="coozplz"/>

    <property name="password" value="*****"/>

</bean>

해당 dataSource 를 DAO 클래스에 설정합니다.

<bean id="coozplzService" class="com.blogspot.CoozplzService">

    <property name="dataSource" ref="dataSource" />   

</bean>

파라 미터로 정보를 받습니다.

localhost_20110921_003543

Parameter 를 받는다.

String driverClass = request.getParameter("driverClass");

String url = request.getParameter("url");

String userName = request.getParameter("userName");

String userPass = request.getParameter("userPass");

String userQuery = request.getParameter("userQuery");

String deptQuery = request.getParameter("deptQuery");

CoozplzService 에 DataSource를 설정한다.

BasicDataSource dataSource = new BasicDataSource();

dataSource.setUrl(config.getUrl());                    // URL

dataSource.setUsername(config.getUserName());          // 이름

dataSource.setPassword(config.getUserPass());          // 비번

dataSource.setDriverClassName(config.getDriverClass());// 클래스

coozplzService.setDataSource(dataSource);              // 설정

이상 끝…^^

Spring 설정 파일 암호화

고객이 스프링 설정 파일 암호화를 해달라는 요청을 했습니다.어찌해야하나 막막하기만 하고 답답하던 때에 구글신이 도움을 줘서 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(암호화된 접속 정보) 로 해야 합니다.

가장 중요한 라이브러리 파일을 넣으셨을 꺼라 생각되어 생략 했습니다.