java - 基于用户角色的反应式 REST API 响应过滤
问题描述
除了阻止一种基于用户角色的反应性 JSON 响应过滤方式 - 使用带有 @JsonFilter 注释的 Pojos 和覆盖 SimpleBeanPropertyFilter.serializeAsField 的 jackson-databind 吗?
阻塞属性过滤示例:
SecureFieldFilter.class:
public class SecureFieldFilter extends SimpleBeanPropertyFilter {
@Override
public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer) throws Exception {
SecureField secureField = writer.findAnnotation(SecureField.class);
//TODO: Get user authorities from ReactiveSpringSecurityContext
//TODO: Filter properties which not mention particular roles in SecureField annotation
}
}
}
SecureField 注释:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SecureField {
UserAuthority[] value();
}
SecureFieldFilter 配置:
@Configuration
public class SecureFieldFilterConfiguration {
@Bean
public Jackson2ObjectMapperBuilderCustomizer addFieldFilters() {
return jacksonObjectMapperBuilder -> {
jacksonObjectMapperBuilder.filters(new SimpleFilterProvider().addFilter("securityFilter", new SecureFieldFilter()));
};
}
}
Foo.class:
@JsonFilter("securityFilter")
public class Banner {
private UUID id;
@NotNull
@SecureField(value={UserAuthority.ROLE_AGENT})
private String field1;
@NotNull
@SecureField(value = {UserAuthority.ROLE_PLAYER, UserAuthority.ROLE_AGENT})
private String field2;
...
}
如何以反应方式根据来自 REST API 响应的用户角色过滤某些属性?
解决方案
推荐阅读
- javascript - 从 ASP.Net MasterPage 调用 JS 函数
- python - 如何在 .Doc 文件上写入字符串
- laravel - EloquentORM 中 ON 语句 (JOIN) 中 AND 语句的等价性
- javascript - 媒体查询在 chrome 和 Firefox 桌面上工作,但在移动设备上不工作
- javascript - 如何从类名中获取动态 id?
- json - 错误:在颤振中使用 fromjson 时,类型“String”不是“index”类型“int”的子类型
- r - 向上舍入到下一个显着数字
- javascript - 如何使用javascript将数据从一个html页面发送到另一个页面
- php - 如何从评论产品中删除昵称和摘要?
- wordpress - Wordpress 在 > 第三个 url 段中显示主页 (200) 而不是 404