Hibernate2 配置文件加密
最近公司做配置文件加密项目,遇到一个应用使用的是Hibernate2,在网上没有找到现有的Hibernate2的方案,于是自己参考jasypt的源码,写了一个Connection Provider实现了加密运作
其中Encoded.decrypt加密、解密的类在此不提供,各位自己发挥
import java.util.Properties;
import com.walmart.init.Encoded;
import net.sf.hibernate.HibernateException; import net.sf.hibernate.connection.DriverManagerConnectionProvider;
public final class EncryptedPasswordDriverManagerConnectionProvider extends DriverManagerConnectionProvider {
public void configure(Properties props) { String user = props.getProperty("hibernate.connection.username"); String password = props.getProperty("hibernate.connection.password"); if (isEncryptedValue(user)) { user = getInnerEncryptedValue(user); props.setProperty("hibernate.connection.username", Encoded.decrypt(user)); } if (isEncryptedValue(password)) { password = getInnerEncryptedValue(password); props.setProperty("hibernate.connection.password", Encoded.decrypt(password)); } try { super.configure(props); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static boolean isEncryptedValue(String value) { if (value == null) { return false; } String trimmedValue = value.trim(); return (trimmedValue.startsWith("ENC(")) && (trimmedValue.endsWith(")")); } private static String getInnerEncryptedValue(String value) { return value.substring("ENC(".length(), value.length() - ")".length()); }
}
Hibernate.cfg.xml文件供参考
</p>
<session-factory> <property name="hibernate.connection.provider_class"> com.walmart.china.ConnectionProvider.EncryptedPasswordDriverManagerConnectionProvider </property> <!-- provider --> <!--property name="connection.datasource">java:comp/env/jdbc/mysql</property --> <!-- Test Config Intr@net--> <property name="dialect">net.sf.hibernate.dialect.SQLServerDialect</property> <property name="connection.driver_class">com.ddtek.jdbc.sqlserver.SQLServerDriver</property> <property name="connection.url">jdbc:datadirect:sqlserver://PCNNT57006SQL\NI1:1433;databaseName=pipeline</property> <!-- <property name="connection.driver_class">sun.jdbc.odbc.JdbcOdbcDriver</property> <property name="connection.url">jdbc:odbc:LocalServer;databaseName=pipeline</property> --> <property name="connection.username">user</property> <property name="connection.password">ENC(STMw69FIE6LihJ+vW/myEA==)</property> ...... </session-factory>
















