JPA-Hibernate persistence.xml 对数据库帐号密码进行加密

1、META-INF 下的 persistence.xml

<persistence-unit name="esa" transaction-type="RESOURCE_LOCAL">
 <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <properties>
   <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
   <property name="hibernate.connection.url" value="jdbc:oracle:thin:@172.1.1.1:1521:test"/>
   <property name="hibernate.connection.username" value="root"/>
   <property name="hibernate.connection.password" value="2be98afc86aa7f2a5a11af92386d8ec9b"/>
   <property name="hibernate.connection.provider_class" value="com.regaltec.common.hibernate.NewConnectionProvider"/>	
   <!-- <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" /> -->																  
         
   <property name="hibernate.dialect" value="com.regaltec.esa.common.utils.OracleDialect"/>
   <property name="hibernate.show_sql" value="false" />
   <property name="hibernate.format_sql" value="true" />
   <!-- 最小连接数 -->
   <property name="c3p0.min_size" value="1" />
   <!-- 最大连接数 -->
   <property name="c3p0.max_size" value="30" />
   <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
   <property name="c3p0.maxIdleTime" value="60" />
   <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
   <property name="c3p0.timeout" value="6000" />
   <!-- 最大的PreparedStatement的数量 -->
   <property name="c3p0.max_statements" value="50" />
   <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒 -->
   <property name="c3p0.idle_test_period" value="120" />
   <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
   <property name="c3p0.acquire_increment" value="1" />
   <!-- 是否每次都验证连接是否可用 -->
   <property name="c3p0.validate" value="false" />
  </properties>
</persistence-unit>

2、新建class NewConnectionProvider.java

package com.regaltec.common.hibernate;

import java.util.Properties;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.cfg.Environment;
import org.hibernate.connection.DriverManagerConnectionProvider;

import com.regaltec.esa.common.utils.EncryptUtil;

public class NewConnectionProvider extends DriverManagerConnectionProvider {
	public static final Logger log = LogManager.getLogger(NewConnectionProvider.class);

	public NewConnectionProvider() {
		super();
	}

	@Override
	public void configure(Properties props) throws HibernateException {
		//String user = props.getProperty(Environment.USER);
		String password = props.getProperty(Environment.PASS);
		try {
			//props.setProperty(Environment.USER, EncryptUtil.decrypt(user));
			//System.out.println("解密前密码为:" + password);
			password = EncryptUtil.decrypt(password);
			props.setProperty(Environment.PASS, password);
			//System.out.println("解密后密码为:" + password);
		} catch (Exception e) {
			log.error("解密数据库帐号密码异常:" + e.getMessage(), e);
		}
		super.configure(props);
	}
}

其中 EncryptUtil 是加密、解密的工具类,可自行编写

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页