首页 > 数据库 >spring boot jpa 数据库字段加密存储

spring boot jpa 数据库字段加密存储

时间:2023-03-16 10:33:58浏览次数:39  
标签:加密 String BCryptPasswordEncoder jpa spring 数据库 boot private AttributeConverter

 

在 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 转换器,从而将密码加密存储在数据库中。

 

标签:加密,String,BCryptPasswordEncoder,jpa,spring,数据库,boot,private,AttributeConverter
From: https://www.cnblogs.com/xiaoruilin/p/17221354.html

相关文章

  • SpringSecurity授权原理
    在第二部分中我们讲解的都是用户认证,不管是用户名密码,还是图形验证码等,最终的目的都是一个:让系统知道你到底是谁在访问你的系统,解决的问题是,你是谁?这部分主要讲......
  • Spring Session库
    SpringSecurity可以与SpringSession库配合使用,只需要做一些简单的配置就可以实现一些功能,如(会话过期、一个账号只能同时在线一个、集群session等)。1)配置session会话超......
  • 前后端分离项目(vue+springboot)集成pageoffice实现在线编辑office文件
    前后端分离项目下使用PageOffice原理图集成步骤前端vue项目在您Vue项目的根目录下index.html中引用后端项目根目录下pageoffice.js文件。例如:<scripttype="te......
  • cannot access class org.springframework.cglib.core.ReflectUtils with java 17
    (inmodulecom.xxx)cannotaccessclassorg.springframework.cglib.core.ReflectUtils(inunnamedmodule@0x2d950574)becausemodulecom.xxxdoesnotreadunname......
  • SpringCloud Alibaba Nacos 简介
    Nocos(DynamicNamingandConfigurationService)一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。可以说Nacos是注册中心和配置中心的组合。Nacos官网;h......
  • 【开源免费】使用Spring Boot和Html实现ChatGPT,1:亿还原,将就看
    highlight:a11y-dark简介前段时间写了一个Chatgpt的Java版SDK开源地址:chatgpt-java欢迎使用。但由于原来OpenAI并没有支持官网的chatgpt模型,所以使用起来相对没有官网......
  • SpringCloud Alibaba 入门简介
    为什么会出现SpringCloudAlibaba?因为SpringCloudNetflix项目进入维护模式。维护模式:意味着SpringCloud团队将不会再向模块添加新功能。将修复block级别的bug以......
  • spring合集
    spring框架概览springwebspringweb源码架构简介Spring5源码解析-SpringWeb中的处理程序执行链spring自动装配import总结浅析@Import、DeferredImportSelector、Im......
  • SpringBoot使用jasypt加解密密码
    在我们的服务中不可避免的需要使用到一些秘钥(数据库、redis等);使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些。打开applic......
  • Spring Study -lesson07-03-15
    自动装配Bean 两种自动装配方法:第一byName ,第二byType属性类型(用byType可以省略写id)。byName要保证所有bean的id必须唯一,这个bean必须和自动注入的属性set方法的......