【发布时间】:2019-07-04 14:37:00
【问题描述】:
使用 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,但是这会将数据过滤回客户端,这很好,但我想在此之前过滤它并防止服务器端应用程序甚至拥有门控列。 https://www.baeldung.com/spring-security-role-filter-json
Hibernate 的 @Filter 似乎过滤掉了整行,但我只想要一个特定的列。此外,似乎没有与 Spring Data 的原生集成。
【问题讨论】:
-
这在实体级别是不可能的。一个原因是 Java 是静态类型的,然后该值将为 null 并且不会像 JSON 中那样丢失
-
我在spring数据层的过滤也很完美。
标签: java hibernate jackson spring-data