【问题标题】:use Spring SPEL in entity class在实体类中使用 Spring SPEL
【发布时间】:2021-12-01 18:48:51
【问题描述】:

我在 application.yml 文件中声明了一个属性

myapp:
  key: lasdfuiwfaskjgfahsgdfhasgdflwer8wezxnb612782rt

在配置类中

@Data
@Configuration
@ConfigurationProperties(prefix = "myapp")
public class ConfigurationHolder {

    public String key;
  
}

我想在列转换器的实体类中使用这个键、值进行加密

@Entity
@Table(name = "test_user")
public class TestUser {

    @Column
    @ColumnTransformer(
            read = "cast(AES_DECRYPT(testKey, #{configurationHolder.key}) as char)",
            write = "AES_ENCRYPT(?, #{configurationHolder.key})"
    )
    private String testKey;
    
}

如何验证 application.yml 文件中的 key 值是否用于列的加密和解密。

【问题讨论】:

    标签: spring-boot hibernate jpa spring-spel


    【解决方案1】:

    有一个similar question

    回答者建议编写一个自定义 Spring 组件,该组件应在运行时通过反射 API 替换注释值。这是一个肮脏的黑客,但它可以工作。

    我建议去custom JPA Attribute Converter。可以使用@Configurable注解在非托管对象中注入@Value

    @Configurable
    public class MyConverter extends implements AttributeConverter<String, String> {
        @Value("myapp.key")
        private String key;
    }
    
    ...
    
    @Entity
    @Table(name = "test_user")
    public class TestUser {
    
        @Column
        @Convert(converter = MyConverter.class)
        private String testKey;
        
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 2015-04-22
      • 2019-02-26
      相关资源
      最近更新 更多