`
zhao103804
  • 浏览: 124615 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

hibernate使用连接池并且处理数据库密码加密

 
阅读更多
hibernate使用连接池并且处理数据库密码加密
明文密码太不安全使用加密吧!~ 
在使用  hibernate框架时怎么来处理密码呢?
 首先我们要找一个切入点 就是 连接池在什么时间读的配置 
这个时候我们解密在给他 看hibernate配置   
<property name="hibernate.connection.provider_class">    
	org.hibernate.connection.C3P0ConnectionProvider  
 </property> 
这就是hibernate把连接交给专门的连接池类来负责 我们就在这里动手脚   
<property name="hibernate.connection.provider_class">    
	name.ixr.connection.C3P0ConnectionProvider   
</property> 
这里换成我们自己的类,当然这个类要有原有类的功能 这里我们想到一个方法使用继承

package name.ixr.connection; 
import java.util.Properties; 
import org.hibernate.cfg.Environment; 
import name.ixr.util.EncUtil; 
/** 
* 自定义C3P0处理 
* 2009-10-10 
* @author IXR 
* @version 1.0 
*/ 
public class C3P0ConnectionProvider extends org.hibernate.connection.C3P0ConnectionProvider { 
} 
}

类有了怎么处理呢? 还有原有的类有什么方法? 需要下载 hibernate  code查看 我看了他的方法 大概了解了下 知道 hibernate读取完配置文件把配置文件对象交给了configure这个方法 然后重构这个方法,实现原来的太麻烦,就算复制代码太多我们只处理中间的一个环节所以没有 必要完全重写,我们用多态吧,都继承了也是为什么上边我用继承,看我怎么写的

/**
* 修改读取配置文件的业务 
* 这里主要为了解密密码 
*/
public void configure(Properties props){ 
	//获取配置密码 
	String password=props.getProperty(Environment.PASS); 
	//密码解 
	password=EncUtil.encToString(password); 
	//处理密码 
	props.setProperty(Environment.PASS, password); 
	//交给父类处理 
	super.configure(props); 
}

这样密码就解密重新设置了 然后交给父类来实现原有应该实现的功能呵呵!~ 处理完毕EncUtil就是我加密解密类!~ 
你们可以用自己的加密类!~ 如果在Spring里,上述方法是不行的。因为Spring直接把用户名密码给了datasource。 hibernate的属性不能生效 
下面是一种便通的方法。需要自己实现一个Configurer类

<bean id="propertyConfigurer" class="com.oa.scm.db.com.service.MyConfigurer">          
	<property name="location">              
		<value>classpath:hibernate.properties</value>          
	</property>      
</bean>

  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">              
	<property name="driverClass">
		<value>${hibernate.connection.driver_class} </value>
	</property>             
	<property name="jdbcUrl">
		<value>${hibernate.connection.url}</value>
	</property>             
	<property name="user">
		<value>${hibernate.connection.username} </value>
	</property>             
	<!-- property name="password">
		<value>${hibernate.connection.password} </value>
	</property-->             
	<property name="initialPoolSize">
		<value>${initialPoolSize}</value>
	</property>             
	<property name="minPoolSize">
		<value>${hibernate.c3p0.min_size} </value>
	</property>             
	<property name="maxPoolSize">
		<value>${hibernate.c3p0.max_size} </value>
	</property>             
	<property name="idleConnectionTestPeriod">
		<value>${hibernate.c3p0.idle_test_period} </value>
	</property>             
	<property name="acquireIncrement">
		<value>${hibernate.c3p0.acquire_increment} </value>
	</property>     
</bean> 

public class MyConfigurer extends PropertyPlaceholderConfigurer {     
@Override    
 protected void processProperties(             
	ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException {         
	System.out.println("MyConfigurer!");         
	String password = props.getProperty("hibernate.connection.password");         
	if (password != null && password.length() > 15) {             
		props.setProperty("hibernate.connection.password",
 		EncryptUtil .decrypt(password));            
 		System.out.println("MyConfigurer done!");

  	 }         
	super.processProperties(beanFactory, props);     
       }
 }

 

 

原文来源:http://www.360doc.com/content/09/1202/15/36589_10207140.shtml

分享到:
评论

相关推荐

    proxool连接池用户名密码加密

    总之,"proxool连接池用户名密码加密"是一个重要的安全实践,通过加密数据库连接的凭证,我们可以提高系统的安全性,保护数据免受未经授权的访问。正确地配置和使用这个功能,可以确保在享受数据库连接池带来的性能...

    Java MD5 加密数据库连接池密码

    总的来说,Java MD5加密数据库连接池密码是一种提高系统安全性的常见做法,通过加密处理,即使数据库配置信息被泄露,也能降低密码被直接利用的风险。同时,了解如何在Java程序中实现MD5加密和解密,对于开发和维护...

    c3p0数据库连接池下载

    **c3p0数据库连接池** 是一个开源的Java数据库连接池组件,它为Java应用程序提供了数据库连接管理功能。在Java应用中,特别是在基于JDBC的Web应用中,c3p0可以有效地管理和复用数据库连接,从而提高系统性能,减少...

    SpringBoot+hibernate+mysql+sqlserver双数据源

    6. 安全性考虑:在实际部署中,需要确保数据库连接的安全性,如使用连接池管理数据库连接,避免资源浪费;另外,敏感信息如数据库密码应加密存储。 7. 数据迁移与同步:在某些场景下,可能需要实现在两个数据库间的...

    数据库连接通用模块数据库连接通用模块

    10. **性能优化**:优化数据库连接,如使用连接池、批处理SQL语句、设置合适的超时时间等,可以显著提升应用程序的性能。 11. **兼容性**:一个优秀的数据库连接通用模块应能兼容多种数据库系统,如MySQL、Oracle、...

    JDBC通过配置文件连接数据库

    - 考虑使用连接池,减少数据库连接的创建和销毁开销。 6. **示例** 在`jdbc.properties`文件中,我们可以这样配置数据库连接信息: ``` db.url=jdbc:mysql://localhost:3306/mydb db.username=root db....

    ssh连接两个数据库

    - `sqlDataSource`: 使用C3P0连接池配置SQL Server的数据源。 - `driverClass`: 数据库驱动类。 - `jdbcUrl`: 数据库URL。 - `user`: 用户名。 - `password`: 密码。 - `autoCommitOnClose`: 自动提交设置。 ...

    简单的S2SH登陆代码,其中包含数据库(struts2+spring+hibernate)

    在数据库连接配置方面,Spring的`applicationContext.xml`或类似的配置文件中会包含数据库连接池和数据源设置。 5. **视图层**:视图通常是JSP页面,负责展示登录表单和结果。登录表单可能包含用户名和密码输入框,...

    数据库连接测试

    5. **使用连接池**:在实际应用中,为了提高性能和资源管理,通常会使用连接池来管理数据库连接。MyEclipse支持配置连接池,如C3P0、Apache DBCP或HikariCP,这些连接池组件可以帮助管理数据库连接的生命周期。 6. ...

    JDBC连接各种数据库经验技巧集萃

    为了提高性能和资源利用率,建议使用连接池来管理数据库连接,如 C3P0、HikariCP 或 DBCP。连接池可以复用已打开的连接,避免频繁创建和关闭连接带来的开销。 3. PreparedStatement 与 Statement 在执行 SQL 语句时...

    基于Java的数据库开发技巧.docx

    为了保护数据库中的数据安全,应该使用加密技术来保护数据的机密性,如密码和敏感信息的加密。同时,应该确保访问数据库的用户具有合适的权限,以避免潜在的安全风险。 测试和调试 在基于 Java 的数据库开发中,...

    在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通

    考虑到数据库的安全性,你应该对敏感信息如数据库密码进行加密存储,可以使用Spring Boot的`@Value`注解配合配置文件的加密功能。 11. **事务管理** Spring Boot默认支持声明式事务管理,确保数据操作的一致性。...

    java 连接数据库实现用户登录功能

    - 使用连接池管理数据库连接,提高性能。 - 采用ORM框架(如Hibernate或MyBatis),简化数据库操作。 通过以上步骤,你可以构建一个简单的Java应用程序,实现与Oracle数据库的连接,完成用户登录功能。记得在实际...

    java 数据库编程宝典.rar

    3. 数据库连接池:为了提高性能和资源管理,开发者通常使用数据库连接池来管理数据库连接。例如,C3P0、Apache DBCP、HikariCP等,这些连接池的工作原理、配置和使用方法会在书中有所阐述。 4. ORM(Object-...

    MySql连接数据库(方法、代码、用到的所有组件)

    - **数据库连接池**:如Apache Commons DBCP,管理数据库连接,提高性能和效率。 - **ORM框架**:如Hibernate,将对象模型映射到关系数据库,简化数据操作。 6. **安全注意事项**: - **避免SQL注入**:使用参数...

    Java数据库编程宝典

    10. 安全性:了解如何在Java中安全地处理数据库密码,防止SQL注入,以及使用加密和访问控制策略来保护数据安全。 通过《Java数据库编程宝典》的学习,读者不仅可以掌握JDBC的基本用法,还能深入理解数据库编程的...

    java数据库开发案例精选

    2. **数据库连接池**:在实际开发中,为了提高性能和资源利用率,我们会使用数据库连接池。例如,C3P0、DBCP、HikariCP等,它们管理数据库连接,避免频繁创建和关闭连接,降低系统开销。 3. **ORM(对象关系映射)...

    数据库连

    - 为提高性能和资源利用率,应用程序通常会使用连接池来管理数据库连接。连接池预先创建并缓存一定数量的连接,避免了频繁的创建和销毁连接的开销。 3. **连接字符串**: - 连接数据库时需要提供包含数据库服务器...

    springmvc整合Hibernate的登录实例带表结构

    - 数据库连接池:为了提高效率,一般会使用连接池(如 C3P0、HikariCP)来管理数据库连接。 - 安全性:在实际生产环境中,密码通常不会明文存储,而是进行加密后再存入数据库。 - 错误处理:添加异常处理机制,...

    Hibernate 3.3主要的新特性包括

    Hibernate 3.3 对 Java 5 的注解支持进行了强化,允许开发者在实体类和属性上直接使用注解来定义数据库映射,减少了XML配置文件的使用。这使得代码更加简洁,提高了开发效率。 2. **Criteria 查询API增强**: 新...

Global site tag (gtag.js) - Google Analytics