网站首页 > 博客文章 正文
1. 简介
Jasypt(Java Simplified Encryption)Spring Boot 提供了用于加密 Boot 应用程序中的属性源的实用程序。
在本文中,我们将讨论如何添加 jasypt-spring-boot 的支持并使用它。
2. 为什么选择Jasypt?
每当我们需要在配置文件中存储敏感信息时——这意味着我们基本上使这些信息容易受到攻击;这包括任何类型的敏感信息,例如凭据,但肯定远不止于此。
通过使用 Jasypt,我们可以为属性文件属性提供加密,我们的应用程序将完成解密它并检索原始值的工作。
3. 将JASYPT与Spring Boot一起使用的方法
让我们讨论一下将Jasypt与Spring Boot一起使用的不同方法。
3.1. 使用jasypt-spring-boot-starter
我们需要向项目添加一个依赖项:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
现在让我们用密钥“password”加密文本“Password@1”,并将其添加到encrypted.properties中:
encrypted.property=ENC(uTSqb9grs1+vUv3iN8lItC0kl65lMG+8)
让我们定义一个配置类AppConfigForJasyptStarter – 将encrypted.properties文件指定为PropertySource:
@Configuration
@PropertySource("encrypted.properties")
public class AppConfigForJasyptStarter {
}
现在,我们将编写一个服务 bean PropertyServiceForJasyptStarter 来从 encrypted.properties 中检索值。可以使用@Value注解或 环境类的getProperty() 方法检索解密的值:
@Service
public class PropertyServiceForJasyptStarter {
@Value("${encrypted.property}")
private String property;
public String getProperty() {
return property;
}
public String getPasswordUsingEnvironment(Environment environment) {
return environment.getProperty("encrypted.property");
}
}
最后,使用上述服务类并设置我们用于加密的密钥,我们可以轻松地检索解密的密码并在我们的应用程序中使用:
@Test
public void whenDecryptedPasswordNeeded_GetFromService() {
System.setProperty("jasypt.encryptor.password", "password");
PropertyServiceForJasyptStarter service = appCtx
.getBean(PropertyServiceForJasyptStarter.class);
assertEquals("Password@1", service.getProperty());
Environment environment = appCtx.getBean(Environment.class);
assertEquals(
"Password@1",
service.getPasswordUsingEnvironment(environment));
}
3.2. 使用 jasypt-spring-boot
对于不使用 @SpringBootApplication 或 @EnableAutoConfiguration 的项目,我们可以直接使用 jasypt-spring-boot 依赖项:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot</artifactId>
<version>2.0.0</version>
</dependency>
同样,让我们用密钥“password”加密文本“Password@2”并将其添加到encryptedv2.properties中:
encryptedv2.property=ENC(dQWokHUXXFe+OqXRZYWu22BpXoRZ0Drt)
让我们为 jasypt-spring-boot 依赖项创建一个新的配置类。在这里,我们需要添加注解@EncryptablePropertySource:
@Configuration
@EncryptablePropertySource("encryptedv2.properties")
public class AppConfigForJasyptSimple {
}
此外,还定义了一个新的 PropertyServiceForJasyptSimple bean 来返回 encryptedv2.properties:
@Service
public class PropertyServiceForJasyptSimple {
@Value("${encryptedv2.property}")
private String property;
public String getProperty() {
return property;
}
}
最后,使用上面的服务类并设置我们用于加密的密钥,我们可以轻松检索 encryptedv2.property:
@Test
public void whenDecryptedPasswordNeeded_GetFromService() {
System.setProperty("jasypt.encryptor.password", "password");
PropertyServiceForJasyptSimple service = appCtx
.getBean(PropertyServiceForJasyptSimple.class);
assertEquals("Password@2", service.getProperty());
}
3.3. 使用自定义 JASYPT 加密器
第 3.1 节中定义的加密器。和 3.2.使用默认配置值构造。但是,让我们定义我们自己的 Jasypt 加密器并尝试用于我们的应用程序。自定义加密器 Bean 将如下所示:
@Bean(name = "encryptorBean")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("password");
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
此外,我们可以修改 SimpleStringPBEConfig 的所有属性。我们需要将属性“jasypt.encryptor.bean”添加到我们的application.properties中,以便Spring Boot知道它应该使用哪个自定义加密器。
例如,我们在应用程序中添加使用密钥“password”加密的自定义文本“Password@3”。
jasypt.encryptor.bean=encryptorBean
encryptedv3.property=ENC(askygdq8PHapYFnlX6WsTwZZOxWInq+i)
一旦我们设置了它,我们就可以轻松地从 Spring 的环境中获取 encryptedv3.property:
@Test
public void whenConfiguredExcryptorUsed_ReturnCustomEncryptor() {
Environment environment = appCtx.getBean(Environment.class);
assertEquals(
"Password@3",
environment.getProperty("encryptedv3.property"));
}
4. 结论
通过使用Jasypt,我们可以为应用程序处理的数据提供额外的安全性。它使我们能够更多地关注应用程序的核心,如果需要,它还可用于提供自定义加密。
猜你喜欢
- 2024-11-13 spring boot配置文件敏感字段加密
- 2024-11-13 Spring Boot数据库密码加密的配置方法
- 2024-11-13 Spring Boot安全之application配置信息加密
- 2024-11-13 如何在SpringBoot项目中实现加密?
- 2024-11-13 SpringBoot进阶-SpringBoot如何实现配置文件脱敏?
- 2024-11-13 加密SpringBoot配置文件技巧(加密pdf文件如何解密编辑)
- 2024-11-13 Spring Boot版本和Jasypt版本的兼容性问题?
- 2024-11-13 SpringBoot加密配置属性(springboot配置密码加密)
- 2024-11-13 SpringCloud-OAuth2(二):实战篇(oauth2.0 springcloud)
- 2024-11-13 SpringBoot 配置文件这样加密,才足够安全!
你 发表评论:
欢迎- 08-06nginx 反向代理
- 08-06跨表插入连续的日期,sheetsname函数#excel技巧
- 08-06初中生也能学的编程,不走弯路,先用后学
- 08-06find命令的“七种武器”:远不止-name和-type
- 08-06恶意代码常见的编程方式
- 08-06kali2021ping 外网不通
- 08-06因为一个函数strtok踩坑,我被老工程师无情嘲笑了
- 08-06hadoop集群搭建详细方法
- 52℃nginx 反向代理
- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- npminstallsave (63)
- #NAME? (61)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)