网站首页 > 博客文章 正文
Jasypt框架是在SpringBoot框架中常用的数据加密的框架,使用Jasypt进行数据脱敏操作也会涉及到数据的加密以及解密的过程。虽然要涉及到加密和解密的过程,但是我们还是可以通过这个框架来实现对于敏感数据的脱敏操作,下面我们就来看看如何使用Jasypt框架实现敏感信息的脱敏操作。
添加Jasypt依赖
要使用Jasypt框架,就需要添加Jasypt所使用的依赖如下所示
如果是Maven项目构建,那么就在POM文件中添加如下的依赖。
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
如果是用Gradle项目构建,那么就在build.gradle文件中添加如下的依赖。
implementation 'org.jasypt:jasypt-spring-boot-starter:3.0.4'
配置Jasypt
依赖添加之后,需要在项目的配置文件中添加如下的配置
jasypt.encryptor.password=abcdefjhijklmnopqrstuvwxyz
这是在配置文件中添加Jasypt的加密密码,因为这个密码就是在程序执行过程中,用来进行加密解密的密码。
使用Jasypt进行数据加密
要使用Jasypt对数据进行加密,可以使用StringEncryptor类的操作来实现对于数据的加密以及解密操作,可以在控制层调用也可以在服务层中进行调用,如下所示,展示了在服务层中如何进行数据加密调用。
import org.jasypt.util.text.AES256TextEncryptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class EncryptionService {
private final AES256TextEncryptor textEncryptor;
public EncryptionService(@Value("${jasypt.encryptor.password}") String encryptionPassword) {
textEncryptor = new AES256TextEncryptor();
textEncryptor.setPassword(encryptionPassword);
}
public String encrypt(String data) {
return textEncryptor.encrypt(data);
}
public String decrypt(String encryptedData) {
return textEncryptor.decrypt(encryptedData);
}
}
在实体类中使用加密
当然除了在逻辑处理中进行调用之外,我们还可以再实体类中进行调用,如下所示,创建了一个实体类,并且在其将数据存入数据库之前进行加密,也就是说存储到数据库中的信息是加密的,然后在数据库读取出库时对数据进行解密,也就是是可以看到一个完整的明文数据,如下所示。就是对手机号进行了加密操作。
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.PostLoad;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String encryptedPhoneNumber;
@Transient
private String phoneNumber;
@PrePersist
@PreUpdate
public void encryptPhoneNumber() {
if (phoneNumber != null) {
this.encryptedPhoneNumber = encryptionService.encrypt(phoneNumber);
}
}
@PostLoad
public void decryptPhoneNumber() {
if (encryptedPhoneNumber != null) {
this.phoneNumber = encryptionService.decrypt(encryptedPhoneNumber);
}
}
// Getters and setters
// Add an instance of EncryptionService
@Transient
private EncryptionService encryptionService = new EncryptionService("your-encryption-password");
}
控制器中使用加密服务
上面我们展示了在Service服务层中对数据的加解密操作,那么下面我们就来看看在控制层进行数据展示的时候,如何对输入数据以及输出数据进行数据加解密操作。如下所示。编写了一个在控制器UserController并且创建了数据加解密调用
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private EncryptionService encryptionService;
@GetMapping
public User getUser() {
User user = new User();
user.setUsername("john.doe");
user.setPhoneNumber(encryptionService.encrypt("12345678946"));
return user;
}
}
在这个实现中EncryptionService就是用来进行数据加解密操作的服务类我们可以在在属性设置的时候对相关的操作进行处理。
使用Jasypt加密属性
当然Jasypt除了对数据进行传输的加解密之外,还可以对配置项的属性来进行加解密处理,如下所示。在application.properties中对数据库密码信息进行配置的修改。
db.password=ENC(encrypted-database-password)
可以通过在属性值中使用ENC(...)语法进行加密。这里传入的字符串encrypted-database-password就是你通过jasypt:encrypt进行加密之后的密钥,如下所示,就可以生成一个密钥串,在方法中,传入的your-encryption-password,就是需要再配置文件中添加的秘钥。
mvn jasypt:encrypt -Djasypt.encryptor.password=your-encryption-password
这种方式会自动解密属性值,而不需要手动处理。
总结
通过上面的步骤,我们就可以在SpringBoot项目中通过Jasypt框架对数进行脱敏操作,并且可以保证数据在传输过程中的安全性,虽然来说,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 配置文件这样加密,才足够安全!
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)