Jasypt Encrypting the database password in hibernate.cfg.xml

本文介绍如何使用Jasypt加密库与Hibernate整合,实现数据库连接参数的安全配置。通过两个不同的ConnectionProvider实现,可以在hibernate.cfg.xml文件中加密存储数据库URL、用户名和密码。

For those applications that define datasources in Hibernate's hibernate.cfg.xml file, Jasypt provides two Connection Provider (org.hibernate.connection.ConnectionProvider) implementations which let the user declare the datasource parameters (driver, url, username and password) in an encrypted manner:

  • org.jasypt.hibernate3|hibernate4.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider, which extends Hibernate's Driver Manager connection provider (a very simplistic pool implementation).
  • org.jasypt.hibernate3|hibernate4.connectionprovider.EncryptedPasswordC3P0ConnectionProvider, which extends Hibernate's C3P0-based connection provider.

They are used like this in hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
   "-//Hibernate/Hibernate Configuration DTD//EN" 
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
<hibernate-configuration>
  <session-factory>
    
    <property name="connection.provider_class">
      org.jasypt.hibernate4.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider
    </property>
    <property name="connection.encryptor_registered_name">
      configurationHibernateEncryptor
    </property>
    
    <property name="connection.url">jdbc:mysql://localhost/reportsdb</property>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.username">reportsUser</property>
    <property name="connection.password">ENC(G6N718UuyPE5bHyWKyuLQSm02auQPUtm)</property>
    <property name="connection.pool_size">12</property>

    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    
    <!-- Mappings etc... -->
        
   </session-factory>
</hibernate-configuration>

In this configuration, Hibernate is told to use Jasypt's DriverManager-based connection provider and is passed a set of configuration parameters which contain an encrypted value, the connection.password property. Then, Hibernate is also told about which is the encryptor object to be used for decrypting the encrypted parameters (connection.encryptor_registered_name).

This encryptor object should have been registered beforehand as a Hibernate Encryptor, as explained in the 'Transparent data encryption' section.



注:本文转载自:http://www.jasypt.org/hibernate.html


根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
<think>嗯,用户遇到了Spring Boot集成jasypt时出现的经典配置错误"Required Encryption configuration property missing: jasypt.encryptor.password"。从引用内容看,用户应该是在配置数据库密码加密时漏掉了关键步骤。 用户引用的资料很全面:[1]明确指出缺失加密配置属性,[2]补充了具体配置示例,[3]详细说明了加密流程和版本差异,[4]则展示了错误堆栈。看来用户已经做过功课,但可能被版本差异或配置位置搞糊涂了。 核心问题其实很明确:系统找不到jasypt所需的解密密码。这通常发生在两种场景:要么完全没配置jasypt.encryptor.password属性,要么配置了但未被正确加载。特别要注意引用3提到的细节——2.x版本配置项名称有变化,很多人容易在这里栽跟头。 解决方案需要分层处理:首先检查基础配置,确保在application.yml里正确声明了jasypt.encryptor.password=your_secret_key;其次注意版本兼容性,1.x用jasypt.encryptor.password2.x要用jasypt.encryptor.password;最后考虑环境变量注入的场景,比如测试环境变量名冲突的问题。 用户可能遇到的隐藏坑点:1) 用ENC()包裹加密串时漏掉括号 2) 密钥包含特殊字符未转义 3) 多环境配置覆盖。引用2那个ENC(cWRqMy9pXYyjtEKBHWWmxQ==)的示例写法很标准,可以提醒用户对照。 考虑到用户已经看到过加密操作说明,回复应该聚焦在排错路径上:从验证配置项名称→检查yml格式→测试密钥加载→最终回退到依赖验证。特别要强调2.x版本配置差异,这可能是最容易被忽视的点。 </think>根据引用内容,"Required Encryption configuration property missing: jasypt.encryptor.password" 错误的核心是**缺少Jasypt解密密钥配置**。以下是分步解决方案: ### 解决方法 1. **配置解密密钥(必选)** 在 `application.yml` 或 `application.properties` 中添加: ```yaml jasypt: encryptor: password: your_decryption_key # 替换为实际密钥 ``` *引用[3]强调:密钥必须与加密时使用的密码一致*[^3]。 2. **加密敏感数据(如数据库密码)** 加密后配置格式: ```yaml spring: datasource: password: ENC(加密后的字符串) # 如 ENC(cWRqMy9pXYyjtEKBHWWmxQ==) ``` *引用[2]展示了加密值的正确格式*[^2]。 3. **检查版本兼容性** - **Jasypt 1.x**:配置项为 `jasypt.encryptor.password` - **Jasypt 2.x/3.x**:配置项改为 `jasypt.encryptor.password`(新版可能要求算法声明) *引用[3]指出版本差异*[^3]。 4. **验证依赖配置** 确保 `pom.xml` 包含正确依赖: ```xml <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version> <!-- 注意版本 --> </dependency> ``` 5. **环境变量替代方案(生产环境推荐)** 通过启动命令注入密钥更安全: ```bash java -jar app.jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} ``` ### 常见错误排查 - 🔍 **密钥未生效**:检查配置文件是否被正确加载(如多环境配置冲突) - ❌ **格式错误**:确保加密值被 `ENC()` 包裹且无空格 - ⚠️ **版本不匹配**:Spring Boot 2.4+ 建议使用 jasypt-spring-boot 3.x 版本 - 🔄 **依赖冲突**:排除旧版 jasypt 依赖(如 `jasypt-spring-boot-autoconfigure`) > **根本原因**:该错误表明 Jasypt 找不到用于解密的密钥,导致无法解析 `ENC(...)` 加密值[^1][^4]。引用[3]证实密钥需同时在配置文件和加密命令中使用相同值[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值