Spring中對properties屬性檔案加密及其解密
阿新 • • 發佈:2019-01-07
之前在專案裡面連線資料庫需要將密碼解密,而且連線好多資料庫,並且有的資料庫需要解密有的直接連線就可以。
這樣程式碼的可讀性特別低,在連線資料庫的時候都要現連線:
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一定別寫錯了
(2)資料來源配置<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>
<!-- 資料來源配置, 使用 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(********)