context-datasource.xml 위치, context-datasource.xml 암호화
마이바티스(Mybatis)를 사용할 때 context-datasource.xml 안에 데이터베이스(DB) URL, 포트, 아이디, 비밀번호를 적어넣게 된다.
아래와 같은 형태다.

|
<?xml version=”1.0″ encoding=”UTF-8″?> |
이 경우 치명적인 단점이 있는데 GitHub 등에 커밋할 경우 아이디나 비밀번호가 유출될 수 있다는 점이다.
물론 해당 파일을 싱크로나이즈 대상에서 제외시킬 수도 있겠지만 실수할 가능성이 존재한다.
따라서 context-datasource.xml 안에 암호화된 값을 기입해놓거나, 일단 의미없는 값을 넣어놓고 변경하는 방법을 소개한다.

|
<?xml version=”1.0″ encoding=”UTF-8″?> |
context-datasource.xml 파일에서 BasicDataSource 클래스명이 들어있는 라인(<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”>)을 주석처리하고, 그 아래에
<bean id=”dataSource” class=”com.thkmon.webstd.db.NewDataSource” destroy-method=”close”> 라는 라인을 추가한다.
경로는 달라져도 좋으나, 해당 경로의 패키지와 클래스를 새로 생성해야 한다.
여기서 com.thkmon.webstd.db 패키지는 필자가 직접 만든 패키지이고, NewDataSource 클래스도 새로 만든 클래스이다.
context-datasource.xml 파일의 url, username, password 에는 암호화된 값 또는 의미없는 값을 넣어둔다.
이어서 com.thkmon.webstd.db 패키지를 만들고, 해당 패키지 안에 NewDataSource.class 파일을 추가한다.
내용은 아래와 같이 작성한다. (BasicDataSource 를 상속)

|
package com.thkmon.webstd.db; import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource; public class NewDataSource extends BasicDataSource { public synchronized void close() throws SQLException { public synchronized void setUrl(String url) { public void setUsername(String username) { public void setPassword(String password) { |
BasicDataSource 클래스를 상속하였으므로 setUrl, setUsername, setPassword 등이 오버라이딩 되어 있다.
위 예제에서는 문자열 값이 하드코딩되어 있는데 그래서는 의미가 없고, 메서드 내용을 적절히 변경하면 된다.
첫번째 방법으로는, context-datasource.xml 쪽에는 의미없는 값을 넣어두고, setUrl, setUsername, setPassword 메서드 안에서는 특정 위치의 설정 파일(properties, config, xml 등)을 읽어들여서 그 안의 값으로 변경한다.
다른 방법으로는, context-datasource.xml 쪽에 암호화된 값을 넣어두고, setUrl, setUsername, setPassword 메서드 안에서 복호화를 수행하여 처리하면 된다. 암복호화 로직은 여기서 따로 설명하지 않는다.
자세한 것은 [JAVA] AES128 암호화 예제(https://blog.naver.com/bb_/221332286531)를 참고할 것.