Spring Boot中Jasypt加密失效问题求助
看起来你已经走对了大部分步骤,但属性还是没被解密,我来帮你排查几个最可能的遗漏点:
检查
@EnableEncryptableProperties的位置
这个注解必须加在你的Spring Boot启动类(就是带有@SpringBootApplication的那个类)上,或者加在被Spring扫描到的配置类中。如果注解放错了位置,Jasypt的加密处理器不会被激活,自然不会解密ENC(...)格式的属性。修正application.properties里的Jasypt配置格式
你提供的配置把两个属性写在了同一行,这在properties文件里是无效的!每个键值对必须单独占一行:jasypt.encryptor.password=secretpassword jasypt.encryptor.algorithm=PBEWithMD5AndDES如果配置没被正确读取,Jasypt无法获取解密密钥,就会直接返回原始的
ENC(...)字符串。验证依赖版本兼容性
确保jasypt-spring-boot-starter的版本和你的Spring Boot版本匹配:- Spring Boot 2.x 对应 jasypt-spring-boot-starter 3.x 版本
- Spring Boot 3.x 对应 jasypt-spring-boot-starter 4.x 版本
比如Maven依赖(以Spring Boot 2.x为例):
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version> </dependency>版本不兼容可能导致Jasypt的自动配置不生效。
确认加密时的密钥和算法与配置一致
虽然当前问题是属性没被解密(直接输出ENC串),但后续如果出现解密失败,也要确保生成密文时用的密钥和算法和配置文件里的完全一致。比如用Jasypt命令行工具加密时,要指定相同参数:java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="你的原始密钥" password=secretpassword algorithm=PBEWithMD5AndDES排查自定义PropertySource的干扰
如果你在项目中自定义了PropertySource或者使用了其他配置加载框架,可能会绕过Jasypt的属性处理器。这种情况下,需要确保Jasypt的EncryptablePropertySource被正确集成到配置加载流程中。
如果以上都排查过了,你可以试试启动时加上--debug参数,查看Spring的自动配置日志,确认JasyptEncryptorAutoConfiguration是否被正常加载。
内容的提问来源于stack exchange,提问作者Milind Pardeshi

