使用Spring JpaRepository(具有Hibernate支持),是否有一种方法可以基于GrantedAuthority有条件地过滤字段?

时间:2019-07-04 14:37:00

标签: java hibernate jackson spring-data

使用Spring Data,Spring Security和Hibernate,是否有一种方法可以过滤基于当前用户的GrantedAuthories选择的列?

例如:

Entity
{
  field1;
  @HasGrantedAuthority('XYX')
  field2;
  field3;
}

鉴于上面的示例,我希望始终返回field1和field3,但仅当用户具有GrantedAuthority =='XYZ'时才返回field2。

SELECT * FROM Entity
vs
SELECT field1, field3 FROM Entity

我已经研究过使用Jackson的@JsonView,但这可以将数据过滤回客户端,这很好,但是我想在此之前进行过滤,并防止服务器端应用程序甚至包含gated列。 https://www.baeldung.com/spring-security-role-filter-json

Hibernate的@Filter似乎过滤掉了整行,但是我只想要一个特定的列。而且,似乎没有与Spring Data进行本机集成。

1 个答案:

答案 0 :(得分:0)

不幸的是,没有根据个人权限来限制属性选择的功能。但是您可以做的是两件事:

  

首先,您可以使用延迟属性加载

使用@Basic(fetch = FetchType.LAZY),然后加载它,以防某人具有必需的权限。

  

第二,您可以根据所需权限的可用性使用projection

在服务层中创建if语句,并根据结果执行不同的存储库方法。在否定情况下,您只检索投影,在肯定情况下,您检索整个实体。这种方法将为您带来最佳性能。