차근차근/Spring

db접속 정보 암호화 (2) | 프로퍼티 | Jasypt

예쁜꽃이피었으면 2022. 6. 8. 15:02

[ DB접근정보 암호화 방법 ]
1. 톰캣 설정에서 DB접속 정보 암호화
순서 : JDNI 설정 -> 접속 정보 암호화

2. 프로젝트 설정에서 DB접속 정보 암호화
순서 : 프로퍼티 파일생성 후 -> Jasypt를 이용해 접속 정보 암호화

 

 

 

1번 방법으로 적용하려고 생각하고 프로젝트 열어보니 프로젝트 내에 DB접속 정보가 있다.

2번 방법으로 실행할 예정이다.


[1] 프로퍼티 파일 설정하기

더보기

설정방법(3)

1) application.properties에서 가져오기
2) 사용자 정의 properties파일에서 가져오기
3) 모든 properteis파일에 정의된 값 가져오기

이 중 원하는 모양으로 설정을 한 후에

자바파일에서 읽어오거나

xml에서 읽어오거나..필요에 따라 다시 선택하면 된다.

 

또, war나 jar로 묶을 때 개발 프로퍼티를 쓸지 운영 프로퍼티를 쓸지도 설정할 수 있는데

지금은 필요하지 않아서 하지 않았다.

 

 

흠.. 추가한 부분은 별로 없었는데 파일 경로 설정을 못해서 시간이 오래 걸렸다.

나는 사용자 정의 프로퍼티를 xml에서 읽어올거다.

<context:property-placeholder> 태그를 사용하여 외부 프로퍼티 파일을 로딩하도록 설정할 수 있다.
<?xml version="1.0" encoding="UTF-8"?>
   <beans xmlns="http://www.springframework.org/schema/beans"	
          xmlns:context="http://www.springframework.org/schema/context"	
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"	
          xsi:schemaLocation="http://www.springframework.org/schema/beans       	   
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"	   
          http://www.springframework.org/schema/context   	   
          http://www.springframework.org/schema/beans/spring-context-3.0.xsd>  
  
  <!--두 개이상 프로퍼티 사용할 수 있다.(콤마로 구분하여)-->	
  <!--
  <context-property-placeholder location="classpath:config/jdbc.properties, classpath:config/monitor.properties"/>	
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destory-method="close">		
    <property name="driverCalssName" value="${jdbc.driver}">/>	
    </bean>	....</beans>
   <context:property-placeholder> 태그를 사용하려면 위 코드와 같이 context 접두어에 대한 네임스페이스를 http://www.springframework.org/schema/context로 지정하고 네임스페이스와 관련된 XML 스키마 경로를 spring-context-3.0.xsd로 지정해 주어야 한다.
출처: https://devbox.tistory.com/entry/Spring-외부-설정-프로퍼티 [장인개발자를 꿈꾸는 :: 기록하는 공간:티스토리]
-->	

[root-context.xml] - 기존 DB연결 정보가 있던 곳
<bean id= "propertyConfigurer"
	class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    p:location="WEB-INF/config/db.properties"/>
    
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
 	<property value="${db.driverclassname}" name="driverClassName"/>
    <property value="${db.url}" name="url"/>
    <property value="${db.name}" name="username"/>
    <property value="${db.password}" name="password"/>
  </bean>
  
  
 [db.properties] - WEB-INF/config폴더 생성 후 db.properties파일 생성 후 내용 작성
 db.driverclassname = oracle.jdbc.driver.OracleDriver
 db.url = url
 db.name = name
 db.password = pwd
더보기

프로퍼티 파일 위치를 처음에는 /src/main/resource 밑에 config폴더 만들어서 뒀었는데 
여기가 잡히지 않았다.

경로에서 /**/config이런식으로 해도 에러는 안났지만 프로퍼티 안에 밸류값을 못 읽어온거 보면 아마 다른 설정이 더 필요했던 것도 같다.

root-context.xml이랑 servlet-context.xml에서 경로 설정할 때 넣어봤던 코드들

코드1 )
<beans:bean id="dbPropertyConfigurer" class="org.springframework.beans.facory.config.PropertyPlaceholderConfigurer">
   <beans:property name="locations">
        <beans:list>
             <beans:value>classpath:/config/db.properties</beans:value>
             <beans:value>classpath:/config/db.properties</beans:value> <- 여러개 쓰고 싶으면 여기 추가
        </beans:list>
   </beans:property>
</beans/bean>

코드2)
<context:property-placeholder location="classpath:/config/db.properties"/>



pom.xml 밑에도 추가했었는데 소용없었음.
<resources>
   <resource>
     <directory>/src/main/resource</directory>
     <filtering>true</filtering>
     <includes><include>**/*.properties</include></includes>
   </resource>
<resources>

 

[2] 프로퍼티 파일 암호화

Jasypt : Java , Java + Spring , Java + 하이버네이트 등 여러 프레임 워크에서 암복호화를 지원해주는 오픈소스

https://velog.io/@asws1457/Jasypt-properties-%EC%95%94%ED%98%B8%ED%99%94

 

[Jasypt] properties 암호화

서론 Spring에서 properties 또는, yaml 파일 활용하여 데이터베이스 접속 정보나, 다양한 설정 정보들을 담아두고 활용하고 있다. properties 또는, yaml 파일이 외부로 노출이 되면 충분히 악의적으로 사

velog.io

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형