JAVA/JAVA
Java | Properties Class
pathas
2020. 2. 12. 17:28
Properties Class
java.util.Properties
Map 인터페이스를 구현하며 Hashtable 컬렉션을 상속하는 클래스.properties 파일을 처리하는 기능을 가진 컬렉션
- Secure Coding을 할 때 사용할 수 있는 방법 중 하나
- 컬렉션이므로 import를 해주어야 사용 가능
- 외부로부터 환경설정 파일을 불러오는 기능이 내장되어 있음
ex) DB연동: ~.conf or .properties(주로 디폴트)
※ Secure Coding: 외부로부터의 해킹 소지가 있는 소스 코드의 보안을 높이는 작업
Properties Method
메소드 | 설명 |
---|---|
void load(InputStream inStream) | 해당 스트림으로부터 key=value 프러퍼티 리스트를 읽어 들임 일반적인 환경설정 파일 및 영문으로 작성된 파일을 불러올 때 사용 |
void list(PrintStream out) | 프로퍼티 리스트를 해당 output 스트림으로 출력 |
String getProperty(String key) | 프로퍼티 리스트 중 key에 해당하는 value를 문자열로 반환 |
Object setProperty(String key, String value) | Hashtable 메소드 호출, key에 해당하는 값을 value로 설정 실제 파일의 값은 수정되지 않음 |
void store(OutputStream out, String comments) | load() 메소드로 스트림이 연결되어 있는 Properties 테이블에 프로퍼티 리스트를 덮어씀 comments는 주석을 뜻하며 내용이 없으면 null 작성 |
※ 프로퍼티 리스트에 한글이 포함되어 있는 경우에는 Input/OutputStream 대신 Reader/Writer 스트림 사용
.properties
Properties 클래스로 불러오는 파일
properties list를 가지고 있음
- 확장자는 .properties로 작성
- ' # ' : 한줄 주석
- Key=Value 형식으로 작성
띄어쓰기를 하지 않는 것이 좋음
# 작성 형식
KEY1=VALUE1
KEY2=VALUE2
예제
ex1.properties_before
Properties 클래스의 load() 메소드로 불러올 .properties 파일
#key value
b=imsi
a=test
PropTest.java
package j200212;
import java.io.*;
import java.util.Properties;
public class PropTest {
public static void main(String[] args) {
// Properties 객체 생성
Properties pro = new Properties();
try {
// 파일 불러오기, 입출력이므로 예외 처리 수행
FileInputStream fis = new FileInputStream(
"C:\\webtest\\3.java\\JAVA-Study\\200212\\src\\j200212\\ex1.properties");
// fis 스트림으로부터 key=value 프로퍼티 리스트를 읽어 들임
pro.load(fis);
// 프로퍼티 리스트 출력
System.out.println(pro); // {b=imsi, a=test}
// 각 key에 해당하는 value 출력
System.out.println(pro.getProperty("a")); // test
System.out.println(pro.getProperty("b")); // imsi
// a key에 해당하는 값을 "merong"으로 설정
pro.setProperty("a", "merong");
System.out.println(pro.getProperty("a")); // merong
// 변경된 프로퍼티 리스트를 파일에 덮어 씀
pro.store(new FileOutputStream("C:\\webtest\\3.java\\JAVA-Study\\200212\\src\\j200212\\ex1.properties"),
"This is a comment.");
} catch (Exception e) {
System.out.println(e);
}
}
}
ex1.properties_after
setProperty(key, value) 메소드와 store(outputStream, comments) 메소드로 수정된 파일
수정된 시간이 자동으로 생성됨
#This is a comment.
#Wed Feb 12 12:47:13 KST 2020
b=imsi
a=merong
민감한 정보를 따로 파일로 만들어서 필요에 따라 관리할 수 있도록 하는 Properties 클래스에 대해 알아보았습니다.
Properties 클래스는 소스 코드의 보안을 높이는 여러 가지 방법 중 하나이기 때문에
알아두면 port 번호나 ip 주소, 사용자 id, pwd 등의 정보를 보다 안전하게 관리할 수 있을 것입니다.
물론 Properties 클래스만으로 완전한 보안이 이루어지는 것은 아니며
암호화와 같은 다른 종류의 시큐어 코딩도 병행해서 사용해야 한다고 합니다.