`

c3p0数据源用户名密码加密

 
阅读更多

一、cn.com.encrypt.java

package cn.com.encrypt;

import java.io.ByteArrayOutputStream;
import java.util.Properties;

import javax.crypto.Cipher;

import org.springframework.beans.factory.FactoryBean;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class DBEncrypt implements FactoryBean {

	private Properties properties;

	public Object getObject() throws Exception {
		return getProperties();
	}

	public Class getObjectType() {
		return java.util.Properties.class;
	}

	public boolean isSingleton() {
		return true;
	}

	public Properties getProperties() {
		return properties;
	}

	public void setProperties(Properties inProperties) {
		this.properties = inProperties;
		String originalUsername = properties.getProperty("user");
		String originalPassword = properties.getProperty("password");
		if (originalUsername != null) {
			String newUsername = deEncryptUsername(originalUsername);
			properties.put("user", newUsername);
		}
		if (originalPassword != null) {
			String newPassword = deEncryptPassword(originalPassword);
			properties.put("password", newPassword);
		}
	}

	private String deEncryptUsername(String originalUsername) {
		return dCode(originalUsername.getBytes());
	}

	private String deEncryptPassword(String originalPassword) {
		return dCode(originalPassword.getBytes());
	}

	public String eCode(String needEncrypt) {
		byte result[] = null;
		try {
			Cipher enCipher = Cipher.getInstance("DES");
			javax.crypto.SecretKey key = Key.loadKey();
			enCipher.init(1, key);
			result = enCipher.doFinal(needEncrypt.getBytes());
			BASE64Encoder b = new BASE64Encoder();
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			b.encode(result, bos);
			result = bos.toByteArray();
		} catch (Exception e) {
			throw new IllegalStateException(
					"System doesn't support DES algorithm.");
		}
		return new String(result);
	}

	public String dCode(byte result[]) {
		String s = null;
		try {
			Cipher deCipher = Cipher.getInstance("DES");
			deCipher.init(2, Key.loadKey());
			BASE64Decoder d = new BASE64Decoder();
			result = d.decodeBuffer(new String(result));
			byte strByte[] = deCipher.doFinal(result);
			s = new String(strByte);
		} catch (Exception e) {
			throw new IllegalStateException(
					"System doesn't support DES algorithm.");
		}
		return s;
	}

	public static void main(String[] args) {
		String s = "test";
		DBEncrypt p = new DBEncrypt();
		String afterE = p.eCode(s);
		System.out.println("after:"+afterE);//这里是加密后的字符
		System.out.println("before:"+p.dCode(afterE.getBytes()));
	}
}
 

 

二、cn.com.encrypt.Key.java

package cn.com.encrypt;

import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import sun.misc.BASE64Decoder;

public class Key {
	private static String encryptKey = "7EV/Zzutjzg=";

	public Key() {
	}

	public static SecretKey loadKey() throws Exception {
		BASE64Decoder d = new BASE64Decoder();
		byte b[] = d.decodeBuffer(encryptKey);
		DESKeySpec dks = new DESKeySpec(b);
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
		return keyFactory.generateSecret(dks);
	}
}
 

 

三、cn.com.encrypt.PropertiesEncryptFactoryBean.java

package cn.com.encrypt;

import java.util.Properties;

import org.springframework.beans.factory.FactoryBean;

public class PropertiesEncryptFactoryBean implements FactoryBean {

	private Properties properties;

	public Object getObject() throws Exception {
		return getProperties();
	}

	public Class getObjectType() {
		return java.util.Properties.class;
	}

	public boolean isSingleton() {
		return true;
	}

	public Properties getProperties() {
		return properties;
	}

	public void setProperties(Properties inProperties) {
		this.properties = inProperties;
		String originalUsername = properties.getProperty("user");
		String originalPassword = properties.getProperty("password");
		if (originalUsername != null) {
			String newUsername = deEncryptUsername(originalUsername);
			properties.put("user", newUsername);
		}
		if (originalPassword != null) {
			String newPassword = deEncryptPassword(originalPassword);
			properties.put("password", newPassword);
		}
	}

	private String deEncryptUsername(String originalUsername) {
		return deEncryptString(originalUsername);
	}

	private String deEncryptPassword(String originalPassword) {
		return deEncryptString(originalPassword);
	}

	private String deEncryptString(String originalString) {
		return new DBEncrypt().dCode(originalString.getBytes());
	}

}
 

 

 

四、config.properties

CHECK_ST_ORL_URL=jdbc:oracle:thin:@127.0.0.1:1521:rac
CHECK_ST_ORL_USER=qBEWE7vGhBs=
CHECK_ST_ORL_PASSWD=qBEWE7vGhBs=
CHECK_ST_ORL_driverClassName=oracle.jdbc.driver.OracleDriver

 

五、applicationContext.xml

<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>/WEB-INF/classes/config.properties</value>
			</list>
		</property>
	</bean>
<bean id="dataSourceOracle"
		class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="automaticTestTable" value="CONNECTION_TEST" />
		<property name="testConnectionOnCheckout" value="true" />
		<property name="acquireRetryAttempts" value="5" />
		<property name="driverClass">
			<value>${CHECK_ST_ORL_driverClassName}</value>
		</property>
		<property name="jdbcUrl">
			<value>${CHECK_ST_ORL_URL}</value>
		</property>
		<property name="properties" ref="dataSourceProperties"/>
		<property name="minPoolSize">
			<value>30</value>
		</property>
		<property name="maxPoolSize">
			<value>100</value>
		</property>
		<property name="initialPoolSize">
			<value>30</value>
		</property>
		<property name="maxConnectionAge">
			<value>1800</value>
		</property>
		<property name="maxIdleTime">
			<value>1800</value>
		</property>
		<property name="maxIdleTimeExcessConnections">
			<value>300</value>
		</property>
		<property name="maxStatements">
			<value>0</value>
		</property>
		<property name="testConnectionOnCheckin">
			<value>false</value>
		</property>
		<property name="idleConnectionTestPeriod">
			<value>900</value>
		</property>
		<property name="checkoutTimeout">
			<value>1000</value>
		</property>
	</bean>
	<bean id="dataSourceProperties" class="cn.com.encrypt.PropertiesEncryptFactoryBean">  
        <property name="properties">  
            <props>  
                <prop key="user">${CHECK_ST_ORL_USER}</prop>  
                <prop key="password">${CHECK_ST_ORL_PASSWD}</prop>  
            </props>  
        </property>  
    </bean> 
 
分享到:
评论
2 楼 reference 2012-05-09  
每次启到这块就卡起了。
JdbcTransactionObjectSupport - JDBC 3.0 Savepoint class is available
AbstractPoolBackedDataSource - Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay ->

后面就抛空指针。
1 楼 reference 2012-05-09  
请问一下,你这个可以用嘛。我去掉,你加密解密那块,不能用啊。
java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507)

是包的版本不同吗?

相关推荐

    详解springboot 使用c3p0数据库连接池的方法

    这个配置将创建一个名为 `dataSource` 的数据源,并使用 C3P0 连接池。 小结 在本文中,我们详细介绍了如何在 Spring Boot 应用程序中使用 C3P0 数据库连接池。C3P0 提供了高性能、可靠性和可扩展性,解决了数据库...

    最新mysql8.0.11的c3p0的3个jar包

    对于c3p0,你需要配置数据源,设置数据库连接参数,如URL、用户名、密码,并定义连接池的配置,如最大连接数、最小连接数、获取连接超时时间等。配置完成后,c3p0会自动管理数据库连接,提高应用的并发处理能力。 ...

    JNDI数据源配置(tomcat)

    例如,使用 c3p0 数据源的配置: ```xml scope="Shareable" type="com.mchange.v2.c3p0.ComboPooledDataSource" factory="org.apache.naming.factory.BeanFactory" user="pual_dev" password="1" ...

    C3P0和MySQL8.0驱动.7z

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。而MySQL 8.0驱动则是MySQL数据库与Java应用程序之间的桥梁,允许程序通过JDBC接口与MySQL进行通信。 C3P0连接池的核心...

    Spring数据源及配置文件数据加密实现过程详解

    Spring提供了多种数据源实现类,包括基于Apache DBCP和C3P0的实现。开发者可以根据需要选择合适的数据源实现类,并使用Spring的依赖注入机制将其集成到应用程序中。 二、数据源配置文件加密 在Spring应用程序中,...

    基于Servlet的用户登录界面

    在后端,项目采用了C3P0数据源来管理数据库连接。C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了更高级的性能和配置选项。通过C3P0,项目可以有效地管理和复用数据库连接,提高系统资源利用率,避免...

    自动登录需要的jar包

    再者,C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC2规范和JDBC3规范。在自动登录场景中,频繁的数据库交互可能会导致大量的数据库连接创建和关闭,这将消耗大量资源。C3P0连接池可以管理和复用...

    博客分页系统

    c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Web应用程序中,尤其是在高并发场景下,数据库连接的创建和关闭是非常耗时的。c3p0通过管理数据库连接,实现连接的复用...

    我的博文 ESP32-C3入门教程 应用 篇(一、 实例 一 通过MQTT协议连接ONENET上报传感器数据)的源码

    在本教程中,我们将深入探讨如何使用ESP32-C3微控制器通过MQTT协议连接到ONENET云平台,以实现传感器数据的上报以及接收云端指令控制设备。ESP32-C3是Espressif Systems公司推出的一款基于RISC-V架构的物联网芯片,...

    mysql-connector-java-8.0.12.jar等包

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,可以配合各种JDBC驱动程序使用,提高数据库连接的效率和资源利用率。C3P0提供了一套灵活的配置选项,用于管理和优化数据库连接的生命周期,例如自动检测失效...

    JSP+JavaBean+Servlet技术实现某网站用户注册和登录功能( 源码打包)

    - Servlet接收到请求,从JavaBean中提取数据,执行验证操作(如检查用户名是否已存在、密码是否符合规则等)。 - 如果验证通过,Servlet将用户信息保存到数据库,并生成成功消息;如果验证失败,返回错误信息。 5...

    JDBCUtils工具类包括MD5加密文件

    1. 数据库连接池的初始化:可能使用了像C3P0、DBCP或者HikariCP这样的连接池库,初始化连接池配置。 2. 获取数据库连接:提供静态方法供其他类调用,获取数据库连接。 3. 执行SQL语句:包括查询、插入、更新和删除...

    用SSH2实现简单的用户登录注册删除功能.pdf

    数据源是连接数据库的关键,本例中使用了C3P0连接池,因为它提供了更丰富的配置选项。 4. **Hibernate配置**:`sessionFactory`配置包括数据源、JDBC驱动、URL、用户名和密码。此外,还需要设置连接池的大小(如...

    dbconnection2.0

    5. **安全性**:数据连接的安全性不容忽视,涉及用户名、密码的加密存储,防止SQL注入攻击,以及使用预编译语句(PreparedStatement)来提升安全性和效率。 综上所述,"dbconnection2.0" 提供了一个全面的数据库...

    基于web的网上商城项目

    5. **C3P0连接池**:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了性能优化的功能。在本项目中,C3P0用于管理数据库连接,提高数据库操作的效率,避免频繁创建和关闭连接,从而提升系统性能。 6. ...

    mvc设计模式之网络留言板

    3. **数据源**:在Web应用中,数据源通常是指连接数据库的资源管理器,如Apache DBCP或C3P0,它们提供数据库连接的管理和池化,确保高效、安全地访问数据库。 **知识点详解:** 1. **MVC设计模式**: - **模型...

    MVC+数据库链接池功能实现

    配置通常包括数据源名称(DataSource)、驱动类名、URL、用户名和密码等。例如,使用HikariCP的配置可能如下: ```xml type="com.zaxxer.hikari.HikariDataSource" driverClassName="com.mysql.jdbc.Driver" url...

    javaweb项目包含登录注册

    - **连接池**:为了提高性能和资源管理,通常使用连接池(如C3P0、Apache DBCP或HikariCP)来管理数据库连接。 5. **安全机制**: - **CSRF Token**:防止跨站请求伪造攻击,每个表单提交时应包含一个唯一的Token...

    data-sources

    确保数据源安全至关重要,包括加密敏感信息(如数据库密码)、限制连接权限、定期更改凭证、以及监控和审计数据源的使用情况。 7. 微服务架构中的数据源: 在微服务架构中,每个服务可能有自己的数据源,这增加了...

    java连接access的mdb文件

    不过,为了提高效率和可维护性,建议使用更现代的JDBC驱动,如Apache的DBCP或C3P0,以及ORM框架如Hibernate或MyBatis,它们提供了更好的性能和更方便的API。 总的来说,Java连接Access MDB文件涉及到JDBC接口、ODBC...

Global site tag (gtag.js) - Google Analytics