spring boot jpa 数据库字段加密存储
在 Spring Boot JPA 中,可以通过自定义 AttributeConverter 类来实现数据库字段的加密存储。
AttributeConverter 是 JPA 2.1 中引入的一个接口,用于在实体属性和数据库列之间进行转换。我们可以继承 AttributeConverter 接口并实现其两个方法:convertToDatabaseColumn 和 convertToEntityAttribute。convertToDatabaseColumn 方法将实体属性转换为数据库列,convertToEntityAttribute 方法将数据库列转换为实体属性。这样,在保存实体时,实体属性将被转换为加密的字符串,并在从数据库检索实体时被转换回原始值。
以下是一个使用 AttributeConverter 将数据库字段加密存储的示例:
java
Copy code
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Converter
public class PasswordEncryptor implements AttributeConverter<String, String> {
private BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
@Override
public String convertToDatabaseColumn(String attribute) {
return encoder.encode(attribute);
}
@Override
public String convertToEntityAttribute(String dbData) {
return dbData;
}
}
在这个示例中,我们使用 Spring Security 提供的 BCryptPasswordEncoder 来加密密码。在 convertToDatabaseColumn 方法中,我们将密码字符串加密并返回加密后的字符串。在 convertToEntityAttribute 方法中,我们直接返回数据库中的原始字符串,因为我们只需在保存时加密字符串。
为了在实体中使用这个自定义转换器,我们需要在实体类的字段上使用 @Convert 注解,并将自定义转换器类作为参数传递。例如:
java
Copy code
@Entity
public class User {
@Id
private Long id;
private String username;
@Convert(converter = PasswordEncryptor.class)
private String password;
// 其他字段和方法
}
在这个示例中,我们使用 @Convert 注解将 password 字段映射到 PasswordEncryptor 转换器,从而将密码加密存储在数据库中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2017-03-16 IIS 下载文件 报错“401 - 未授权: 由于凭据无效,访问被拒绝。”