【发布时间】:2017-06-13 12:45:27
【问题描述】:
使用 RESTEasy 和 Jackson,是否可以在我的模型中使用 @RolesAllowed 注释,以避免某些属性在输出中被序列化,具体取决于用户的角色?
我已经找到了大量关于如何使用 Jersey 执行此操作的文档,但没有找到 RESTEasy。
我在这个架构上被阻止了,所以切换库不是一个选项,并且使用自定义 ObjectMapper 解释 here 也不是一个选项,因为模型足够大,以至于它太耗时了标记大型数据集的每个属性以进行正确的序列化。另外,这是指较旧版本的 Jackson 库,我不确定如何使其与新版本一起使用。
编辑
具体请参阅this blog post 以了解我要完成的工作。请注意,这是特定于泽西岛的,到目前为止,我没有找到有关 RESTEasy 的文档来完成此操作。
【问题讨论】:
-
指出的解决方案应该适用于最新版本的 Jackson 和 RESTEasy。您提到:模型足够大,以至于标记大型数据集的每个属性以进行正确序列化非常耗时好的,那么您将应用哪些标准来过滤属性?
-
解决方案参考了
ObjectMapper::getSerializationConfig::setSerializationView这个方法,这个方法早就被弃用了。我尝试了withView方法,它看起来相同但没有结果。如问题中所述,标准是用户必须具有访问该字段的特定权限。例如。具有管理员权限的用户将能够访问它,否则不能。恕我直言,它也使代码更易于阅读和区分用例。 -
我了解您想要执行特定于角色的序列化。我要问的是:如果您不想使用视图(注释每个 bean 的每个属性),您将使用哪些标准来选择将被序列化的属性?我想到的一个选项是按名称过滤属性(例如,使用
SimpleBeanPropertyFilter)。然后,在ContextResolver中,您将设置过滤器,而不是设置视图。 -
我明白你的意思,我正在寻找一种使
@RolesAllowed注释工作的方法:这样可以使用正确的角色和 EJB 容器对 getProperty() 方法进行注释将不允许调用该方法,从而删除该属性,如此处所述 blog.dejavu.sk/2014/02/04/… (请注意,这适用于 Jersey,而不是 RESTEasy)。我正在寻找等效的解决方案。我希望我已经更清楚了,很抱歉造成误解 -
我只是在实施它,准确无误,谢谢 :)