1. 程式人生 > >Spring中對properties屬性檔案加密及其解密

Spring中對properties屬性檔案加密及其解密

之前在專案裡面連線資料庫需要將密碼解密,而且連線好多資料庫,並且有的資料庫需要解密有的直接連線就可以。

這樣程式碼的可讀性特別低,在連線資料庫的時候都要現連線:

Properties prop = new Properties();
			prop.load(Thread.currentThread().getContextClassLoader()
					.getResourceAsStream("lecture.properties"));
			Session s = Session.getInstance(prop);
			// OA資料庫連線地址
			String oaIp = s.getProperty("oaIp");
			Class.forName("oracle.jdbc.driver.OracleDriver");

			String url = "jdbc:oracle:" + "thin:@" + oaIp;
			// OA使用者名稱
			String user = s.getProperty("oaUsername");
			// OA密碼
			String password = s.getProperty("oaPassword");
			PropertiesEncryptFactoryBean encryptor = new PropertiesEncryptFactoryBean();

那麼我們可以將資料庫的連線資訊放到配置檔案裡面,並且在配置檔案解密,這樣在連線資料庫的時候只需在選擇載入那個連線:

(1)在spring的某一個xml配置檔案中加入載入解密的配置屬性程式碼:

這裡的classpath一定別寫錯了

<bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
		<property name="algorithm" value="PBEWithMD5AndDES" />
		<property name="password" value="jesong" />
	</bean>
	<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
		<property name="config" ref="environmentVariablesConfiguration" />
	</bean>
	<bean id="propertyConfigurer"
		class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
		<constructor-arg ref="configurationEncryptor" />
		<property name="ignoreResourceNotFound" value="false"/>
		<property name="locations">
			<list>
				<value>classpath:config.properties</value>
			</list>
		</property>
	</bean>   
(2)資料來源配置
<!-- 資料來源配置, 使用 BoneCP 資料庫連線池 -->
	<bean id="OAdataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > 
	    <!-- 資料來源驅動類可不寫,Druid預設會自動根據URL識別DriverClass -->
	    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<!-- 基本屬性 url、user、password -->
		<property name="url" value="${oaIp}" ></property>
		<property name="username" value="${oaUsername}" />
		<property name="password" value="${oaPassword}" />
	</bean>
	<bean id="gddataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > 
	    <!-- 資料來源驅動類可不寫,Druid預設會自動根據URL識別DriverClass -->
	    <property name="driverClassName" value="${jdbc.driver}" />
		<!-- 基本屬性 url、user、password -->
		<property name="url" value="${gdIp}" />
		<property name="username" value="${gdUsername}" />
		<property name="password" value="${gdPassword}" />
	</bean>

(3)在相應的需要載入哪一個資料庫:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring/datasource.xml");
				DriverManagerDataSource dataSource=(DriverManagerDataSource) applicationContext.getBean("OAdataSource");
				System.out.println(dataSource.getUrl());
				con=dataSource.getConnection();
				
				System.out.println("OA資料庫連線成功!");
(4)另外在資料庫配置檔案中config.properties檔案中,如果哪一個需要解密,那麼需要加上字首ENC(**********):
password=ENC(********)