`
sklst
  • 浏览: 39008 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

为Hibernate配置文件加密的三套解决方案(一)

    博客分类:
  • J2EE
阅读更多
Hibernate配置文件hibernate.cfg.xml中存放了我们连接数据库的相关信息,其中设计到许多数据库的敏感信息,比如连接地址,用户名和密码,有时候我们交由发布组进行发布时并不希望他们看到数据库的连接密码,就需要对hibernate配置文件中的部分信息进行加密,我在解决这一问题中实践了三种方法,第一种是重载连接供应器,第二种是使用Hibernate官方推荐的Jasypt,第三种其实算不上是加密,而是使用WebLogic连接池将相关信息放在WebLogic的配置中,下面会具体阐述这三种方法。

第一种重载连接供应器:
这种方法是我在网上看到的,原文连接是:
http://blog.csdn.net/sdbany/archive/2008/10/23/3132809.aspx

但是在实际使用的时候发现代码有问题,可能是作者没有贴全,所以有些功能无法实现,于是我重新写了代码。

首先创建一个连接供应器,配置文件里的参数解释都是此类负责,所以,只要在此类中进行密文解密即可。
import java.util.Properties;

import org.hibernate.HibernateException;
import org.hibernate.cfg.Environment;
import org.hibernate.connection.DriverManagerConnectionProvider;

public class CustomDriverManagerConnectionProvider extends
		DriverManagerConnectionProvider {

	public CustomDriverManagerConnectionProvider() {
		super();
	}
	
	@Override
	public void configure(Properties props) throws HibernateException{
		String user = props.getProperty(Environment.USER);
		String password = props.getProperty(Environment.PASS);
		props.setProperty(Environment.USER, SecUtil.decrypt(user));
		props.setProperty(Environment.PASS, SecUtil.decrypt(password));
		super.configure(props);
	}
	
}

再写一个类,使用AES负责字符串的加密与解密这里我们参照原作者的方法
/**
 * AES加密工具
 * 
 * @author Bany
 * 
 * @version 创建时间:2008-8-5 上午10:58:16
 * 
 */

public class SecUtil {

    private static byte[] keybytes = { 0x31, 0x32, …… };

    public static void main(String[] args) throws Exception {
        String e1 = encrypt("newpassword");
        System.out.println(e1);
        String e2 = decrypt(e1);
        System.out.println(e2);
    }

    /**
     * 加密
     * @param value
     * @return
     */
    public static String encrypt(String value) {
        
        String s=null;

        int mode = Cipher.ENCRYPT_MODE;

        try {
            Cipher cipher = initCipher(mode);

            byte[] outBytes = cipher.doFinal(value.getBytes());

            s = String.valueOf(Hex.encodeHex(outBytes));
        } catch (Exception e) {
            e.printStackTrace();
        }

        return s;
    }

    /**
     * 解密
     * @param value
     * @return
     */
    public static String decrypt(String value) {

        String s = null;

        int mode = Cipher.DECRYPT_MODE;

        try {
            Cipher cipher = initCipher(mode);

            byte[] outBytes = cipher.doFinal(Hex.decodeHex(value.toCharArray()));

            s = new String(outBytes);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return s;
    }
    
    private static Cipher initCipher(int mode) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException{
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        Key key = new SecretKeySpec(keybytes, "AES");
        cipher.init(mode, key);
        return cipher;
    }
}

当然,你也可以使用自己写的加密方法,或者是Java官方推荐的一些加密方法
调用SecUtil.encrypt的方法,把用户密码加密生成密文,然后根据密文修改hibernate.cfg.xml文件
<property name="connection.username">c59cd98</property>
<property name="connection.password">68e32593ea5943a6a</property>
<property name="connection.provider_class">com.CustomDriverManagerConnectionProvider</property>

第一二行是加密后的密文,第三行是使用自定义的连接器

如果使用第三方的连接器,CustomDriverManagerConnectionProvider则需要继承于相应的连接器,如C3P0ConnectionProvider

第二种:使用Hibernate官方推荐的Jasypt
3
1
分享到:
评论
3 楼 swallow_pulm 2009-07-16  
1 楼,如果你对java安全机制一点都不了解的话,就能运行成功,那真是很牛X啊。
 
我弄了很久才弄出来。还要加commons-codec jar包的。

还有一点就是,原作者也写的太粗略了吧,比如:“ private static byte[] keybytes = { 0x31, 0x32, …… };  ”   如果对这方面不是很了解的话,谁知道是什么意思!!
2 楼 qwerASDF1234 2008-12-23  
Thank you very match
1 楼 wangtiantian5566 2008-12-12  
支持楼主,学到东西,且很实用.
运行成功

相关推荐

    给hibernate配置文件加密解密的方案

    Hibernate 配置文件加密解密方案 在本文中,我们将讨论如何在 Hibernate 配置文件中对数据库密码进行加密和解密,以保护数据的安全。该方案通过使用 Java 的 Cipher 类和 DES 对称加密算法来实现加密和解密操作。 ...

    SSH详细配置文件(自己个人经验)

    #### 三、常见问题与解决方案 - **包的导入冲突**:在构建SSH框架时,Struts2、Hibernate和Spring的库可能存在版本不一致导致的冲突。解决方法是先删除所有自动导入的库,然后手动替换为预处理过的Jar包集合,确保...

    jasypt加密_spring整合.zip

    在这个"jasypt加密_spring整合.zip"压缩包中,我们将会探讨如何将Jasypt与Spring框架整合,以便在Hibernate配置文件中安全地存储敏感信息。 首先,Jasypt提供了两种主要的加密模式:强加密(Strong Encryption)和...

    Struts_ Hibernate整合和配置

    整合Struts和Hibernate可以提供一个强大的、高效的Web应用程序解决方案,使开发者能够更便捷地处理业务逻辑和数据存储。 Struts是一个基于MVC设计模式的Web应用框架,它帮助开发者组织和控制应用程序的流程。Struts...

    maven+springmvc+hibernate+shiro权限控制

    总之,"maven+springmvc+hibernate+shiro权限控制"的组合,不仅利用了Spring MVC的高效Web开发能力,Hibernate的便捷数据操作,还结合了Shiro的强大安全特性,为开发复杂、安全的Web应用提供了一套完整的解决方案。

    Ajax(DWR) + Spring + Hibernate + Struts整合登陆注册

    2. 集成Hibernate:设置Hibernate配置文件,定义数据源、实体类和映射文件,确保与Spring的整合。 3. 配置Struts:创建Struts配置文件,定义Action类及其对应的URL路径,以及结果视图的跳转。 4. 实现Ajax:在客户端...

    SpringBoot+hibernate+mysql+sqlserver双数据源

    总的来说,"SpringBoot+Hibernate+MySQL+SQLServer双数据源"项目展示了如何在Java环境中灵活处理多数据库的需求,为复杂的企业级应用提供了可靠的解决方案。通过理解并掌握这些技术,开发者可以提升自己的技能,应对...

    spring hibernate struts login3

    通过编写Hibernate配置文件和实体类,我们可以轻松地执行CRUD操作,比如查询数据库中是否存在特定的用户名和对应的加密密码。 **Struts框架** 是基于MVC设计模式的Java Web应用框架,主要用于构建动态网站。在登录...

    shiro 集成springmvc +hibernate mysql 登录认证以及授权

    在这个项目中,"shiro 集成springmvc +hibernate mysql 登录认证以及授权"是将Shiro与Spring MVC和Hibernate集成,用于构建一个基于MySQL数据库的完整的用户登录认证和权限管理解决方案。 1. **Shiro**:Apache ...

    struts与hibernate结合的BBS系统

    当两者结合使用时,可以形成强大的企业级应用解决方案,尤其在构建BBS(Bulletin Board System,电子公告板系统)这样的交互性强、数据量大的应用时,这种结合显得尤为重要。 在"struts与hibernate结合的BBS系统"中...

    学生选课管理系统(java开发,框架是spring+struts1.2+hibernate)

    总的来说,学生选课管理系统(v1.0)利用SSH框架构建了一个高效、易用的选课平台,为教育机构提供了数字化的解决方案,提升了教育管理的现代化水平。对于开发者而言,它也是一个学习和实践Java Web开发的优秀案例。

    hibernate123

    虽然文件中的“hibernate123”标题和“hibernate release 3.6.5 final”描述指向了Hibernate框架的一个具体版本,但文件的其余部分似乎更多地涉及到了网络配置、数据库连接以及一些应用程序的具体登录信息,这些信息...

    网络硬盘(struct 2+hibernate+spring)实现

    这个项目使用了Struts 2、Hibernate和Spring这三大Java Web开发框架,旨在提供一个高效、安全的网络存储解决方案。 **Struts 2框架**: Struts 2是MVC(模型-视图-控制器)架构模式的实现,它为Java Web应用程序...

    Struts2+hibernate+spring 整合的登录案例

    Struts2、Hibernate和Spring是Java Web开发中的三大框架,它们各自负责应用程序的不同层面:Struts2处理MVC(Model-View-Controller)架构中的控制层,Hibernate专注于数据持久化,而Spring则提供了全面的依赖注入...

    ssh2框架整合与应用,相关的配置文件

    Spring框架则是一个全面的后端解决方案,它不仅包含依赖注入(DI)和面向切面编程(AOP),还提供了事务管理、数据访问抽象、远程服务支持等功能。在SSH2中,Spring通常用来管理Struts2的Action实例,以及整合...

    基于SpringBoot+Hibernate+Shiro的库存管理系统后端.zip

    Hibernate通过实体类、配置文件以及映射文件,将数据库操作转化为对Java对象的操作,降低了数据库操作的复杂性,提高了开发效率。 【Shiro】 Apache Shiro是一个强大且易用的Java安全框架,提供了认证、授权、加密...

    web方面的处理struts,struts,hibernate等

    Struts、Struts2 和 Hibernate 是Java Web开发中三个非常重要的框架,它们分别在MVC(Model-View-Controller)架构的不同层面发挥作用,为开发者提供了高效、可维护的解决方案。 Struts 是 Apache 软件基金会的一个...

    网络硬盘(Struts 2+Hibernate+Spring实现)

    Spring框架是一个全面的后端开发解决方案,提供了依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理等功能。在本项目中,Spring作为核心容器,负责管理所有组件(包括Struts 2和Hibernate的实例),实现各层...

    struts_hibernate_velocity_mysql 实现用户登录和注册

    2. **配置文件**:Struts的struts-config.xml用于配置Action和ActionForm,Hibernate的hibernate.cfg.xml用于配置数据库连接,web.xml是Web应用的部署描述符。 3. **Velocity模板**:.vm文件,用于生成HTML页面。 4....

Global site tag (gtag.js) - Google Analytics