java - 从数据库获取数据时解密

标签 java spring hibernate

我正在使用 Hibernate 开发 Spring MVC 项目。我有一个表,其中一些列具有加密数据。每当我想要获取数据(唯一结果或列表)时,我必须循环数据并执行解密逻辑,然后再次设置到模型/实体中。

目前我们正在做这样的事情:

            query = session.createSQLQuery("SELECT C.* FROM CITY C");
            query.addEntity(City.class);                
            List<City> list = query.list();
            for (City city : list)
            {
                city.setName(AESHelper.decrypt(city.getName(), "key"));
            }

我们可以在 Hibernate 中使用一些东西,当 Hibernate 将数据转换为实体时,我们可以应用这样的逻辑,我们可以使用 ResultTransformer 来实现这一点吗?

最佳答案

毫无疑问,您可以使用 ResultTransformer。但是,如果您有很多需要此的列/实体,则使用 Hibernate Interceptors

在您的示例中,使用如下所示的自定义注释来注释 name

City {
 @CustomAnnotation(decrypt = true) 
 private String name;
..
}

在拦截器中,当加载数据时,检查此自定义注释的实体属性。如果它设置为 true 则解密它。

这种方法是非侵入性的。

Example

更新:结果转换器

sess.createSQLQuery("SELECT name from City where name like 'xxyy'")
        .setResultTransformer(new ResultTransformer(){
   Object transformTuple(Object[] tuple, String[] aliases){
       // assign each tuple value to your object and return
   }

})

关于java - 从数据库获取数据时解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27408211/

相关文章:

java - 忽略 hibernate native 查询中的空列表

java - 您如何告诉 Hibernate 您的实体类映射采用 JPA 1.0 语法?

java - @Converter 不适用于 JPA 2.4

java - 无法使用 eclipse helios 设置 apache axis 2

Spring IDREF 使用

java - 执行 GET 请求时实现 token 样式安全性

mysql - hibernate可选关系不显示数据

java - 单击每个元素并执行操作时出现问题

java - JFreeChart X 轴标签超出图表区域

java - spring配置文件中的动态依赖注入(inject)