표준프레임워크 공통컴포넌트를 이미 설치했다면, 프로젝트 내 /src/main/resources/egovProps/globals.properties 쪽에
파일이 있다는 걸 알거라 생각하고 넘어가겠습니다.
공통컴포넌트는 globas.properties에 다양한 설정 값을 가지고 있습니다.
그 중 DB에 대한 정보가 아래와 같이 들어갑니다.
#Globals.mysql.DriverClassName=net.sf.log4jdbc.DriverSpy
#Globals.mysql.Url=jdbc:log4jdbc:mysql://localhost:3306/test38
#Globals.mysql.UserName = 사용자계정
#Globals.mysql.Password = 비밀번호
계정정보 및 접속 정보는 보안상 변경이 필요하기 때문에, 표준프레임워크 암호화 간소화 설정을 사용해서 암호화 해보겠습니다.
먼저 src/test/java쪽과 src/test/resources 쪽에서 암호값을 만든 뒤 main 쪽에서 적용한 뒤 was에 프로젝트를 올려 db를 구동시켜보겠습니다.
첫 번째로 프로젝트 내 메이븐 사용 중이라면 pom.xml에 아래와 같은 라이브러리가 선언되었고, 빌드가 되었는지 확인해보시면 됩니다.
위치
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.crypto</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
version 부분은 위에 공통으로 선언되어있고 별도로 기입하셔도 되지만, dependency를 위해 버전별 호환 여부를 점검하시기 바랍니다.
src/test/java란 곳에
egovframwork.com.cmm.crypto.EgovEnvCryptoAlgorithmCreateTest.java를 만들어 아래와 같은 코드를 넣어주시기 바랍니다.
package egovframwork.com.cmm.crypto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import egovframework.rte.fdl.cryptography.EgovPasswordEncoder;
public class EgovEnvCryptoAlgorithmCreateTest {
private static final Logger LOGGER = LoggerFactory.getLogger(EgovEnvCryptoAlgorithmCreateTest.class);
//계정암호화키 키
public String algorithmKey = "egovframe";
//계정암호화 알고리즘(MD5, SHA-1, SHA-256)
public String algorithm = "SHA-256";
//계정암호화키 블럭사이즈
public int algorithmBlockSize = 1024;
public static void main(String[] args) {
EgovEnvCryptoAlgorithmCreateTest cryptoTest = new EgovEnvCryptoAlgorithmCreateTest();
EgovPasswordEncoder egovPasswordEncoder = new EgovPasswordEncoder();
egovPasswordEncoder.setAlgorithm(cryptoTest.algorithm);
LOGGER.info("------------------------------------------------------");
LOGGER.info("알고리즘(algorithm) : "+cryptoTest.algorithm);
LOGGER.info("알고리즘 키(algorithmKey) : "+cryptoTest.algorithmKey);
LOGGER.info("알고리즘 키 Hash(algorithmKeyHash) : "+egovPasswordEncoder.encryptPassword(cryptoTest.algorithmKey));
LOGGER.info("알고리즘 블럭사이즈(algorithmBlockSize) :"+cryptoTest.algorithmBlockSize);
}
}
Run as> Java Applications 로 프로젝트를 돌리면 아래와 같은 값이 Console에 찍힐 겁니다.
[log4j]2019-09-18 13:18:24,658 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoAlgorithmCreateTest] ------------------------------------------------------
[log4j]2019-09-18 13:18:24,661 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoAlgorithmCreateTest] 알고리즘(algorithm) : SHA-256
[log4j]2019-09-18 13:18:24,661 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoAlgorithmCreateTest] 알고리즘 키(algorithmKey) : egovframe
[log4j]2019-09-18 13:18:24,689 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoAlgorithmCreateTest] 알고리즘 키 Hash(algorithmKeyHash) : gdyYs/IZqY86VcWhT8emCYfqY1ahw2vtLG+/FzNqtrQ=
[log4j]2019-09-18 13:18:24,689 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoAlgorithmCreateTest] 알고리즘 블럭사이즈(algorithmBlockSize) :1024
다음은 src/test/resources쪽에 아래 두개의 파일을 만들어 줍니다.
//EgovEnvCryptoUserTest.java
package egovframwork.com.cmm.crypto;
//데이터베이스 연결 항목(Url, UserName, Password) 인코딩 값 생성 JAVA
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import egovframework.rte.fdl.cryptography.EgovEnvCryptoService;
import egovframework.rte.fdl.cryptography.impl.EgovEnvCryptoServiceImpl;
public class EgovEnvCryptoUserTest {
private static final Logger LOGGER = LoggerFactory.getLogger(EgovEnvCryptoUserTest.class);
public static void main(String[] args) {
String[] arrCryptoString = {
"아이디", //데이터베이스 접속 계정 설정
"비밀번호", //데이터베이스 접속 패드워드 설정
"데이터베이스접속주소", //데이터베이스 접속 주소 설정
"net.sf.log4jdbc.DriverSpy" //데이터베이스 드라이버
};
LOGGER.info("------------------------------------------------------");
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:/egovframework/spring/com/crypto/context-crypto-test.xml"});
EgovEnvCryptoService cryptoService = context.getBean(EgovEnvCryptoServiceImpl.class);
LOGGER.info("------------------------------------------------------");
String label = "";
try {
for(int i=0; i < arrCryptoString.length; i++) {
if(i==0)label = "사용자 아이디";
if(i==1)label = "사용자 비밀번호";
if(i==2)label = "접속 주소";
if(i==3)label = "데이터 베이스 드라이버";
LOGGER.info(label+" 원본(orignal):" + arrCryptoString[i]);
LOGGER.info(label+" 인코딩(encrypted):" + cryptoService.encrypt(arrCryptoString[i]));
LOGGER.info("------------------------------------------------------");
}
} catch (IllegalArgumentException e) {
LOGGER.error("["+e.getClass()+"] IllegalArgumentException : " + e.getMessage());
} catch (Exception e) {
LOGGER.error("["+e.getClass()+"] Exception : " + e.getMessage());
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:egov-crypto="http://www.egovframe.go.kr/schema/egov-crypto"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.egovframe.go.kr/schema/egov-crypto http://www.egovframe.go.kr/schema/egov-crypto/egov-crypto-3.8.xsd">
<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="useCodeAsDefaultMessage">
<value>true</value>
</property>
</bean>
<egov-crypto:config id="egovCryptoConfig"
initial="false"
crypto="true"
algorithm="SHA-256"
algorithmKey="egovframe"
algorithmKeyHash="gdyYs/IZqY86VcWhT8emCYfqY1ahw2vtLG+/FzNqtrQ="
cryptoBlockSize="1024"
/>
</beans>
그리고 역시 EgovEnvCryptoUserTest.java 파일을 Run as > Java Applications..로 돌리시면 아래 콘솔 처럼 암호값을 얻으실 겁니다.
[log4j]2019-09-18 13:32:33,663 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] ------------------------------------------------------
[log4j]2019-09-18 13:32:33,703 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3ce1e309: startup date [Wed Sep 18 13:32:33 KST 2019]; root of context hierarchy
[log4j]2019-09-18 13:32:33,744 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] Loading XML bean definitions from class path resource [egovframework/spring/com/crypto/context-crypto-test.xml]
[log4j]2019-09-18 13:32:33,888 DEBUG [egovframework.rte.fdl.cryptography.config.EgovCryptoConfigBeanDefinitionParser] EgovCryptoConfigBeanDefinitionParser doParse Execute !!!
[log4j]2019-09-18 13:32:33,888 DEBUG [egovframework.rte.fdl.cryptography.config.EgovCryptoConfigBeanDefinitionParser] egov.crypto.algorithmKey : xml property setting!!
[log4j]2019-09-18 13:32:33,888 DEBUG [egovframework.rte.fdl.cryptography.config.EgovCryptoConfigBeanDefinitionParser] egov.crypto.algorithmKeyHash : xml property setting!!
[log4j]2019-09-18 13:32:33,888 DEBUG [egovframework.rte.fdl.cryptography.config.EgovCryptoConfigBeanDefinitionParser] EgovCryptoConfigBeanDefinitionParser httpd load start...
[log4j]2019-09-18 13:32:33,890 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] Loading XML bean definitions from InputStream resource [resource loaded through InputStream]
[log4j]2019-09-18 13:32:33,905 DEBUG [egovframework.rte.fdl.cryptography.config.EgovCryptoConfigBeanDefinitionParser] EgovCryptoConfigBeanDefinitionParser httpd load end...
[log4j]2019-09-18 13:32:33,980 DEBUG [egovframework.rte.fdl.cryptography.impl.EgovARIACryptoServiceImpl] passwordEncoder's algorithm : SHA-256
[log4j]2019-09-18 13:32:33,992 DEBUG [egovframework.rte.fdl.property.impl.EgovPropertyServiceImpl] debug.properties.filename
[log4j]2019-09-18 13:32:34,006 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] ------------------------------------------------------
[log4j]2019-09-18 13:32:34,006 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] 사용자 아이디 원본(orignal):root
[log4j]2019-09-18 13:32:34,037 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] 사용자 아이디 인코딩(encrypted):qsJPlU9QNewFIlyt5CSK9Q%3D%3D
[log4j]2019-09-18 13:32:34,038 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] ------------------------------------------------------
[log4j]2019-09-18 13:32:34,038 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] 사용자 비밀번호 원본(orignal):frame001
[log4j]2019-09-18 13:32:34,038 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] 사용자 비밀번호 인코딩(encrypted):Ltn3IIvmO2OI3hJ7V4aT%2Bg%3D%3D
[log4j]2019-09-18 13:32:34,038 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] ------------------------------------------------------
[log4j]2019-09-18 13:32:34,038 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] 접속 주소 원본(orignal):jdbc:log4jdbc:mysql://localhost:3306/roletest38?serverTimezone=UTC
[log4j]2019-09-18 13:32:34,038 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] 접속 주소 인코딩(encrypted):IPnSE1%2BSpbvetos96I7vdandlsI0robasuaiQomjB%2BCSxEZ1gRStroVxVuHV9MlF9ULBojnkcLQJTBaUzTc5mn2o55GX7QuUEkMYE219%2Bbk%3D
[log4j]2019-09-18 13:32:34,038 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] ------------------------------------------------------
[log4j]2019-09-18 13:32:34,038 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] 데이터 베이스 드라이버 원본(orignal):net.sf.log4jdbc.DriverSpy
[log4j]2019-09-18 13:32:34,038 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] 데이터 베이스 드라이버 인코딩(encrypted):RC2Xpum1xR5Djc9LD1tsx%2B6RmBK%2Fli2vgmOkLbTft2k%3D
[log4j]2019-09-18 13:32:34,039 INFO [egovframwork.com.cmm.crypto.EgovEnvCryptoUserTest] ------------------------------------------------------
이제 콘솔에서 얻은 encrypted 암호 값을 아래 해당 노란 화살표 파일에 들어가
아래와 같이 넣어 줍니다. (예시는 mysql)
Globals.mysql.DriverClassName=콘솔값
Globals.mysql.Url=콘솔값LBojnkcLQJTBaUzTc5mn2o55GX7QuUEkMYE219%2Bbk%3D
Globals.mysql.UserName = 콘솔값
Globals.mysql.Password = 콘솔값
다음은 아래 노란 화살표의 파일을 엽니다. context-crypto.xml
context-crypto.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:egov-crypto="http://www.egovframe.go.kr/schema/egov-crypto"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.egovframe.go.kr/schema/egov-crypto http://www.egovframe.go.kr/schema/egov-crypto/egov-crypto-3.8.xsd">
<!--
initial : globals.properties 연계 Url, UserName, Password 값 로드 여부(설정값 : true, false)
crypto : 계정 암호화 여부(설정값 : true, false)
algorithm : 계정 암호화 알고리즘
algorithmKey : 계정 암호화키 키
cryptoBlockSize : 계정 암호화키 블록사이즈
-->
<egov-crypto:config id="egovCryptoConfig"
initial="true"
crypto="true"
algorithm="SHA-256"
algorithmKey="egovframe"
algorithmKeyHash="gdyYs/IZqY86VcWhT8emCYfqY1ahw2vtLG+/FzNqtrQ="
cryptoBlockSize="1024"
/>
</beans>
위와 같이 넣어준 후 datasource에서 decrypt를 해줍니다. context-datasource.xml로 갑니다.
코드를 아래와 같이 변경해줍니다.
<!-- MySQL -->
<!-- before -->
<beans profile="mysql">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${Globals.mysql.DriverClassName}"/>
<property name="url" value="${Globals.mysql.Url}" />
<property name="username" value="${Globals.mysql.UserName}"/>
<property name="password" value="${Globals.mysql.Password}"/>
</bean>
</beans> -->
<-- after -->
<beans profile="mysql">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="#{egovEnvCryptoService.decrypt('${Globals.mysql.DriverClassName}')}"/>
<property name="url" value="#{egovEnvCryptoService.getUrl()}" />
<property name="username" value="#{egovEnvCryptoService.getUsername()}" />
<property name="password" value="#{egovEnvCryptoService.getPassword()}" />
</bean>
</beans>
자 이제 프로젝트를 기동하시면 WAS와 DB가 잘 연결되었음을 알 수 있습니다.
그 외 에러 발생 시 댓글을 달아주시면 도와드리겠습니다~~~~~
'표준프레임워크_eGovFrame > 공통컴포넌트_Common Components' 카테고리의 다른 글
MacOS 표준프레임워크 공통컴포넌트 3.8 첨부파일 위치 찾기 (0) | 2019.08.06 |
---|---|
표준프레임워크 공통컴포넌트 3.8 HTMLTagFilter 특정 페이지 미적용하기(javaconfig 방식) (0) | 2019.07.24 |
표준프레임워크 3.8 공통컴포넌트 권한관리 (1) | 2019.07.18 |
표준프레임워크 공통컴포넌트 3.8 MySQL DB 연결 에러 (1) | 2019.07.17 |
표준프레임워크 공통컴포넌트 3.8 HTML 5 Multi Upload (0) | 2019.07.02 |