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(********)





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章