springboot 实体 字段加密
时间: 2024-09-20 11:05:26 浏览: 48
Vue结合SpringBoot注册发送邮件激活.zip
5星 · 资源好评率100%
Spring Boot 中实体字段加密通常是通过一些第三方库来实现的,比如 Spring Security、Jasypt 或者 BCrypt 等。这些库允许你在数据库表中存储明文数据,但在应用程序层面处理它们时自动加密。
1. Jasypt: 这是一个开源库,它提供了一种简单的方式来对 Java 对象的属性进行加密。你可以使用 @Encrypt 注解标记需要加密的字段,并配置一个密码源(KeyGeneratorService)来管理密钥。
```java
@Value("${jasypt.encryptor.password}")
private String password;
@Autowired
private EncryptablePropertyResolver resolver;
@Entity
public class User {
@Column(encrypt = true)
private String encryptedPassword;
// 获取加密后的密码
public String getPassword() {
return resolver.resolveField("encryptedPassword", String.class);
}
}
```
2. Spring Data JPA 的加密支持: 如果你的项目使用了 Spring Data JPA,可以配合 `spring-boot-starter-data-jpa` 和 `spring-boot-starter-security`,利用 JPA 启动器的内置加密支持,如 `@Encrypted` 注解。
```java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Encrypted
private String password; // 使用默认的密码策略
}
```
配置加密器:
```yaml
spring:
jpa:
properties:
javax.persistence.schema-generation.create-source: flyway
javax.persistence.jdbc.url: jdbc:mysql://localhost/test?useSSL=false&serverTimezone=UTC
javax.persistence.hibernate.ddl-auto: update
hibernate:
encrypt:
enabled: true
key-registry-ref: my-secret-key-registry
```
创建一个 KeyRegistry 接口和实现:
```java
@Configuration
@EnableJpaEncrypt
public class CryptoConfig implements KeyRegistry {
@Override
public SecretKey getSecretKey(SecretKeyProvider keyProvider, Algorithm algorithm) {
return keyProvider.getKey(algorithm);
}
@Bean
public SecretKeyProvider secretKeyProvider() {
// 实现获取密钥的方法
return ...;
}
}
```
阅读全文