专业的编程技术博客社区

网站首页 > 博客文章 正文

Spring Boot版本和Jasypt版本的兼容性问题?

baijin 2024-11-13 09:32:15 博客文章 4 ℃ 0 评论

Jasypt和Spring Boot的兼容性问题有时会引发一些配置问题,特别是在不同版本的Spring Boot和Jasypt之间。如下所示。

Failed to bind properties under 'spring.redis.password' to java.lang.String

下面我们就来看看是如何发生这种问题的?

兼容性问题解决

在使用Jasypt 3.x的时候,通常与Spring Boot 2.x及以上版本兼容。如下所示。

  • Spring Boot 2.x 与 Jasypt 3.x的版本兼容性问题,jasypt-spring-boot-starter 版本3.x与Spring Boot 2.x版本兼容良好
  • Spring Boot 3.x 与 Jasypt 3.x的版本兼容性问题,最新版本的Jasypt 3.x,最新版本会更好地支持Spring Boot 3.x。

加密算法问题

这里我们以Jasypt3.0.4版本为例进行说明,首先就先来添加相关的依赖。

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>

接下来就是对SpringBoot的配置文件进行配置,如下所示。这里我们可以通过YML的方式进行配置也可以通过properties的方式进行配置。

jasypt.encryptor.password=mySecretKey
jasypt.encryptor.algorithm=PBEWithMD5AndDES

spring.redis.password=ENC(<yourEncryptedText>)

这里需要注意配置的内容jasypt.encryptor.algorithm=PBEWithMD5AndDES,也就是说这里我们采用了什么方式进行加密,那么在实际加密的时候就要通过什么方式对相关信息进行加密操作,或者是我们可以不指定。如下所示。

import org.jasypt.util.text.AES256TextEncryptor;

public class EncryptUtil {
    public static void main(String[] args) {
        AES256TextEncryptor textEncryptor = new AES256TextEncryptor();
        textEncryptor.setPassword("mySecretKey");
        String encryptedText = textEncryptor.encrypt("myRedisPassword");
        System.out.println("Encrypted Text: " + encryptedText);
    }
}

上面这个例子中我们使用了AES256TextEncryptor进行加密的,然后进入这个类之后会看到,如下的内容

其中我们会发现它的加密的算法是PBEWithHMACSHA512AndAES_256,也就是说在上面我们配置的时候锁配置的的那个项也要是这个,不然就会出现上面的报错。

在Jasypt3.X中提供了很多的加密的算法如下图所示。

当然我们也可以集成TextEncryptor接口来自定实现,这个在后续的分享中我们再来详细的说明。

配置使用

加密操作完成之后,接下来要做的事情就是配置,如下所示。

spring.redis.password=ENC(<encryptedText>)

将加密完成之后的内容通过ENC(<encryptedText>)配置到SpringBoot配置文件中。

测试使用

确认jasypt-spring-boot-starter依赖已经被正确引入并且没有被排除。添加以下代码来检查Jasypt是否在正确运行,如下所示。

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class TestEncryptor implements CommandLineRunner {

    @Value("${spring.redis.password}")
    private String redisPassword;

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Decrypted spring.redis.password: " + redisPassword);
    }
}

如果配置正确并且选择的加密算法解密算法都是一样的,那么我们就会在控制台上看到解密之后的对应的配置文件的明文是什么。

总结

在配置过程中,需要注意的第一就是配置版本的兼容性问题,第二就是算法是否能够正常匹配。二者缺一不可。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表