spring data jpa 拦截

spring boot项目,数据层spring data jpa
现在想在数据层把个人信息的敏感字段加密?因为项目过大,如何事项在查询语句执行之前增加拦截,将查询参数进行加密,及获取数据后将查询数据进行解密。

建议将敏感字段置空,或者通过不同接口返回,对于数据安全上可以使用oauth、jwt等技术通过token来获取敏感,因为即使你数据进行了加密。前端仍然需要解密,不但浪费性能,还会加大工作量,望采纳!

简单的对方法进行aop方式的处理,还是有其他需要特别注意的地方?

可以了解下 AttributeConverter 看看是否满足需求哈,示例代码见下文,示例为将实体类中定义的 Instant 类型转换为 Date 类型以存入数据库。
(同理的,字符串转字符串也可以定义,此时,dbData 为加密后的数据,实体中属性为未加密数据即可)

定义 Converter

 public class InstantDateAttributeConverter implements AttributeConverter<Instant, Date> {
    @Override
    public Date convertToDatabaseColumn(Instant attribute) {
        return Optional.ofNullable(attribute)
                .map(Date::from)
                .orElse(null);
    }

    @Override
    public Instant convertToEntityAttribute(Date dbData) {
        return Optional.ofNullable(dbData)
                .map(Date::toInstant)
                .orElse(null);
    }
}

使用 Converter (当然要在 JPA 的实体类中使用哈)

@Convert(converter = InstantDateAttributeConverter.class)
private Instant modifiedTime;