전자정부 프레임워크 문의
- 작성자 :
- 문*
- 작성일 :
- 2018-05-21 11:37:33
- 조회수 :
- 3,173
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
1. DB접속정보를 properties 파일로 관리하는 경우가 있는데 보통 jasypt와 같은 라이브러리를 통해 암호화를 해주고 있나요? 아니면 다른 방식으로 암호화를 해주고 있는지 알고 싶습니다. 아무래도 직접 DB접속정보를 기재하면 보안 이슈가 생기기 마련인데 전자정부 쪽에서는 어떻게 관리하고 있는지... properties를 사용하지 않고 was와 jndi로 설정하여 사용하는 것이 맞는지?
2.
Egov 3.7 버전을 사용중입니다. Properties 파일을 추가하여 사용하고자 하여 여러가지 건드려주었습니다.
1. context-common.xml 수정
1) xmlns:util="http://www.springframework.org/schema/util" 추가
2) 사용하려는 경로의 properties 파일 추가. WEB-INF 밑에 폴더를 만들어서 properties 파일을 관리 중입니다.
<util:properties id="config" location="/WEB-INF/config/config.properties" />
3) EgovProperteis.java 상단에
@Value("#{config}")
public static Properties config;
를 선언하고
public static final String MODE = config.getProperty("mode");
와 같이 선언하여 사용하려하니깐 해당 값이 null로 잡혀 오류가 발생합니다.
아마 static 변수로 properties 파일을 선언하여 사용하기 때문에 그런 듯 한데...
저렇게 쓰려는 이유가 기존의 getProperty 메소드를 조금 수정하여,
public static final String DEV_FILE
= RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + "dev.properties";
public static final String REAL_FILE
= RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + "real.properties";
.
.
.
.
public static String getProperty(String keyName){
.
.
.
if (CODE.equals("dev")) {
PROPERTIES_FILE = DEV_FILE ;
}else {
PROPERTIES_FILE = REAL_FILE ;
}
FileInputStream fis = null;
try{
Properties props = new Properties();
fis = new FileInputStream( PROPERTIES_FILE );
props.load(new java.io.BufferedInputStream(fis));
value = props.getProperty(keyName).trim();
.
.
.
}
와 같이 config.properties에 정의해놓은 CODE 값에 따라 개발환경 properties 파일과 운영환경 properties 파일을 분기문을 통해 불러오고자 하려고 합니다.
이렇게 접근하는 방법이 잘못된건지, 아니면 해결방법이 있는지 궁금합니다.
2.
Egov 3.7 버전을 사용중입니다. Properties 파일을 추가하여 사용하고자 하여 여러가지 건드려주었습니다.
1. context-common.xml 수정
1) xmlns:util="http://www.springframework.org/schema/util" 추가
2) 사용하려는 경로의 properties 파일 추가. WEB-INF 밑에 폴더를 만들어서 properties 파일을 관리 중입니다.
<util:properties id="config" location="/WEB-INF/config/config.properties" />
3) EgovProperteis.java 상단에
@Value("#{config}")
public static Properties config;
를 선언하고
public static final String MODE = config.getProperty("mode");
와 같이 선언하여 사용하려하니깐 해당 값이 null로 잡혀 오류가 발생합니다.
아마 static 변수로 properties 파일을 선언하여 사용하기 때문에 그런 듯 한데...
저렇게 쓰려는 이유가 기존의 getProperty 메소드를 조금 수정하여,
public static final String DEV_FILE
= RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + "dev.properties";
public static final String REAL_FILE
= RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + "real.properties";
.
.
.
.
public static String getProperty(String keyName){
.
.
.
if (CODE.equals("dev")) {
PROPERTIES_FILE = DEV_FILE ;
}else {
PROPERTIES_FILE = REAL_FILE ;
}
FileInputStream fis = null;
try{
Properties props = new Properties();
fis = new FileInputStream( PROPERTIES_FILE );
props.load(new java.io.BufferedInputStream(fis));
value = props.getProperty(keyName).trim();
.
.
.
}
와 같이 config.properties에 정의해놓은 CODE 값에 따라 개발환경 properties 파일과 운영환경 properties 파일을 분기문을 통해 불러오고자 하려고 합니다.
이렇게 접근하는 방법이 잘못된건지, 아니면 해결방법이 있는지 궁금합니다.
A
안녕하세요.
표준프레임워크 센터 입니다.
1. 답변
센터에서는 jasypt을 사용하여 properties파일에 대한 암호화를 정식으로 가이드하지는 않으나
다음과 같은 방식으로 설정이 가능하실듯 합니다.
참고하시기 바랍니다.
<bean id="encryptorConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<property name="password" value="encryptionKey" />
</bean>
<bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config" ref="encryptorConfig" />
</bean>
<bean class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg ref="encryptor" />
<property name="locations">
<list>
<value>classpath:/egovframework/egovProps/#{systemProperties['egov.globals.properties.name']}.properties</value>
</list>
</property>
</bean>
2. 답변
스테이징서버에 따라 어떤 설정값을 수동으로 주고 EgovProperties,java파일에서 제어를 하실려고 의도 인듯 합니다.
그 방법보다 VM옵션을 주고 EgovProperties.java에서 가져오는 방법은
어떠실지 검토하시면 좋을듯 합니다.
* VM옵션 (서버에 설정)
-Degov.globals.properties.name=globals_dev
* EgovProperties.java
private static final String GLOBALS_PROPERTIES_FILE_NAME = System.getProperties().getProperty("egov.globals.properties.name");
public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath().substring(0, EgovProperties.class.getResource("").getPath().lastIndexOf("com"));
public static final String GLOBALS_PROPERTIES_FILE = RELATIVE_PATH_PREFIX + "egovProps" + FILE_SEPARATOR + GLOBALS_PROPERTIES_FILE_NAME + ".properties";
아니면 서버개발환경의 Hudson / Jenkins로 빌드시 처리하는 방법이 있을듯 하니
이 방법도 검토하셔도 될듯 합니다.
감사합니다.
표준프레임워크 센터 입니다.
1. 답변
센터에서는 jasypt을 사용하여 properties파일에 대한 암호화를 정식으로 가이드하지는 않으나
다음과 같은 방식으로 설정이 가능하실듯 합니다.
참고하시기 바랍니다.
<bean id="encryptorConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<property name="password" value="encryptionKey" />
</bean>
<bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config" ref="encryptorConfig" />
</bean>
<bean class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg ref="encryptor" />
<property name="locations">
<list>
<value>classpath:/egovframework/egovProps/#{systemProperties['egov.globals.properties.name']}.properties</value>
</list>
</property>
</bean>
2. 답변
스테이징서버에 따라 어떤 설정값을 수동으로 주고 EgovProperties,java파일에서 제어를 하실려고 의도 인듯 합니다.
그 방법보다 VM옵션을 주고 EgovProperties.java에서 가져오는 방법은
어떠실지 검토하시면 좋을듯 합니다.
* VM옵션 (서버에 설정)
-Degov.globals.properties.name=globals_dev
* EgovProperties.java
private static final String GLOBALS_PROPERTIES_FILE_NAME = System.getProperties().getProperty("egov.globals.properties.name");
public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath().substring(0, EgovProperties.class.getResource("").getPath().lastIndexOf("com"));
public static final String GLOBALS_PROPERTIES_FILE = RELATIVE_PATH_PREFIX + "egovProps" + FILE_SEPARATOR + GLOBALS_PROPERTIES_FILE_NAME + ".properties";
아니면 서버개발환경의 Hudson / Jenkins로 빌드시 처리하는 방법이 있을듯 하니
이 방법도 검토하셔도 될듯 합니다.
감사합니다.