데이터 소스 또는 FTP 서버와 같은 리소스를 구성 할 때 이러한 구성 정보를 독립적 인 외부 속성 파일에 배치하고 Spring 구성 파일의 $ {user} 및 $ {password}와 같은 자리 표시기를 통해 속성 파일의 속성 항목을 참조 할 수 있습니다.
이 구성에는 두 가지 이점이 있습니다.
Spring은 Bean을로드 할 때 외부 속성 파일을 참조 할 수있는 PropertyPlaceHolderConfigurer를 제공합니다. PropertyPlaceHolderConfigurer는 BeanFactoryPostProcessorbean 인터페이스를 구현하므로 Bean Factory 후 프로세서입니다.
1 기본 견적
1.1 PropertyPlaceHolderConfigurer 메소드 (XML 구성)
Bean에서 데이터 소스를 정의해야한다고 가정합니다.
<bean id = "dataSource"Destion-method = "close"p : driverclassname = "com.mysql.jdbc.driver"p : url = "jdbc : mysql : //127.0.0.1 : 3306/spring4"p : username = "root"p : password =/>
여기서 드라이버 클래스 이름, JDBC URL 및 데이터베이스 사용자 이름 및 비밀번호는 XML에 직접 작성됩니다. 이러한 방식으로 배포 중에 데이터베이스 구성 정보를 변경 해야하는 경우 먼저 XML을 찾은 다음 불편합니다.
이름이 system.priperties라고 가정 할 때이 정보를 구성 파일로 추출하는 것이 좋습니다.
DriverClassName = com.mysql.jdbc.driverurl = jdbc : mysql : //127.0.0.1 : 3306/spring4username = rootpassword =
속성 파일은 다중 속성을 정의 할 수 있으며 각 속성의 형식은 다음과 같습니다.属性名=属性值
스프링 구성 :
<!-외부 속성 파일-> <bean p : location = "classpath : system.properties"p : fileencoding = "utf-8"/> <!-데이터 소스-> <bean id = "dataSource"Destroy-method = "close"p : driver className = "$ {driver className}"p : url} " p : username = "$ {username}"p : password = "$ {password}"/>이 구성 후에는 배포 할 때만이 구성 파일에주의를 기울여야합니다.
PropertyPlaceHolderConfigurer 속성 설명은 다음과 같습니다.
| 재산 | 설명 |
|---|---|
| 위치 | 속성 파일의 경로를 지정합니다. |
| 위치 | 다중 속성 파일의 경로를 지정합니다. |
| 파일 코딩 | 파일의 인코딩 형식. 지정되지 않은 경우 Spring은 운영 체제의 기본 인코딩 형식을 사용하여 파일의 내용을 읽습니다. |
| 주문하다 | 여러 PropertyPlaceHolderConfigurers가 구성 파일에 정의 된 경우이 속성을 통해 우선 순위를 지정할 수 있습니다. |
| 위장대 정리 | 자리 표시 자 접미사, 기본값은 $ {입니다. |
| placeholdersuffix | 자리 표시 자 접두사, 기본값은}입니다. |
1.2 컨텍스트 : Property-Placehoder 메소드 (XML 구성)
컨텍스트 네임 스페이스를 사용하여 속성 파일을 정의 할 수 있습니다. 속성 파일은 PropertyPlaceHolderConfigurer의 구성 방법보다 우아합니다.
<context : property-placeholder location = "classpath : System.Properties"파일 인코딩 = "UTF-8"/>
이 방법에서는 속성을 암호화하거나 구성 정보를 저장하기 위해 데이터베이스 테이블을 사용하는 고급 기능이 필요하지만 PropertyPlaceHolderConfigurer 클래스를 확장 한 다음 앞에서 언급 한 Bean 구성 방법이 채택되어야합니다.
1.3 @Value 메소드 (주석 또는 Java 클래스 구성 기반)
주석이 달린 콩은 @Value로 주석을 달린 Bean의 멤버 변수 또는 방법에 속성 값을 자동으로 주입 할 수 있습니다.
@ComponentPublic Class CustomDatasource {@Value ( "$ {driverClassName}") private String driver className; @Value ( "$ {url}") 개인 문자열 URL; @Value ( "$ {username}") 개인 문자열 사용자 이름; @Value ( "$ {password}") 개인 문자열 비밀번호; // getter/setter를 생략}Java 클래스 자체를 기반으로 @Configuration에 주석을 달아주는 클래스는 @Component에 주석을 달므로 참조 메소드는 주석 구성을 기반으로 참조 메소드와 동일합니다.
참고 : 사용하는 동안, 참조 속성 값이 속성 파일에 존재하고 유형 일치에 존재하는지 확인하십시오. 그렇지 않으면 예외가 발생합니다.
2 암호화 속성 값
무감각 속성 정보의 경우 속성 파일에 일반 텍스트로 표시되는 것이 합리적이지만 속성 정보가 민감한 정보 (예 : 데이터베이스 사용자 이름 및 비밀번호 등) 인 경우 Ciphertext에 저장하는 것이 좋습니다. 민감한 정보가 Ciphertext가 저장되면 서버 로그인 권한이있는 사람은 누구나 기밀 정보를 볼 수있어 시스템 보안에 영향을 줄 수 있습니다.
특히 높은 보안 요구 사항 (은행, 공공 보안 시스템 등)이 필요한 시스템의 경우이 민감한 정보는 일부 특정 유지 보수 직원의 손에 달려야합니다. 따라서이 정보를 암호화 한 다음 스프링 컨테이너가 파일을 읽은 후 파일을 해독해야합니다.
PropertyPlaceHolderConfigurer는 자리 표시 자 콘피어 업퍼 포트 클래스에서 상속되어 사용하기 전에 속성을 변환 할 수있는 방법을 설계합니다.
| 방법 | 설명 |
|---|---|
| ConvertProperty (String PropertyName, String PropertyValue) | 각 속성 값이로드 및 읽히면이 방법은이를 변환하도록 요청됩니다. |
| 문자열 convertPropertyValue (String OriginalValue) | 매개 변수가 속성 값에서만 전달된다는 점을 제외하고는 이전 방법과 유사합니다. |
| void convertProperties (속성 소품) | 모든 속성 값을 변환합니다. |
기본적 으로이 세 가지는 빈 방법입니다. PropertyPlaceHolderConfigurer를 확장하여 해당 변환 방법을 무시하고 암호화 된 속성 값 파일을 지원할 수 있습니다.
2.1 DES 암호화 및 암호 해독 도구 클래스
정보의 암호화는 대칭과 비대칭의 두 가지 방법으로 나뉩니다. 대칭 적으로 암호화 된 정보가 해독 될 수 있음을 의미하는 반면, 비대칭 방법은 암호화 된 정보를 기반으로 원래 값으로 해독 할 수 없습니다. MD5는 비대칭 암호화에 속하며 DES는 대칭 암호화에 속합니다. 따라서 여기서 우리는 속성 값을 암호화하기 위해 DES를 사용합니다. 속성 값을 읽을 때 DES를 사용하여 해독합니다.
DES 암호화 및 암호 해독 도구의 소스 코드를 보려면 여기를 클릭하십시오.
DES 암호화 및 암호 해독 지침 :
우리는 DES 암호화 및 암호 해독 도구를 사용하여 명령 줄을 통해 데이터베이스 계정과 비밀번호를 암호화합니다. 그런 다음 암호화 된 문자열을 System.Properties에 다음과 같습니다.
사용자 이름 = Q5L+2pprspq = password = udyjsvkxc/q =
2.2 속성 파일의 값을 암호화합니다
먼저, 암호 해독 변환을 지원하는 속성 구성자를 사용자 정의하십시오.
공개 클래스 CustomPropertyPlaceHolderConfigurer 확장 PropertyPlaceHolderConfigurer { / *** DES 키* / 개인 정적 최종 문자열 key_str = "123456"; / *** 값 암호화 속성 이름 그룹*/ public static final String [] encrypt_property_names = new String [] { "username", "password"}; @override Protected String ConvertProperty (String PropertyName, String PropertyValue) {if (! isdecrypt (propertyName)) {retud propertyValue; } // Decrypt return new des (key_str) .decrypt (propertyValue); } / ** * * @param propertyname propertyname propertyname * / private boolean isdecrypt (string propertyname) {return arrayutils.crantains (encrypt_property_names, propertyName); }}알아채다:
그런 다음 <ean>을 통해 사용자 정의 속성 파일을 구성합니다.
<bean p : location = "classpath : System.Properties"p : fileencoding = "utf-8"/>
이러한 방식으로 스프링 컨테이너는 암호화 된 속성 파일을로드 할 수 있습니다. 매우 간단하지 않습니까?
o (∩_∩) o 하하 ~
자신에게 3 인용
Spring은 Bean 정의에서 $ {propname}을 통해 속성 값을 참조 할 수 있으며 $ {propname}을 사용하여 속성 파일의 속성간에 상호 참조를 구현할 수 있습니다.
Database = Spring4driverClassName = com.mysql.jdbc.driverUrl = jdbc : mysql : //127.0.0.1 : 3306/$ {database}여기서 다른 속성 (데이터베이스 인스턴스 이름)의 값은 $ {database}를 통해 참조됩니다. 따라서 일부 복잡한 특성의 경우 이러한 방식으로 속성의 변경 사항을 추출하여 구성을 최소화 할 수 있습니다.
참고 : 속성 값이 너무 길면 각 줄의 끝에 "/"를 추가하고 속성 값을 여러 줄로 나눌 수 있습니다.
profile.jdbc.url = jdbc : mysql : //127.0.0.1 : 3306/dbname? useUnicode = true & charac
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.