如何基于调用者实现REST服务的字段级访问控制?

时间:2016-03-17 19:59:42

标签: java rest

我要求调用者限制REST响应中的属性。考虑JSON格式的响应。

Ex:对于给定的REST端点,默认响应类似于

 {
    "id" : "111"
    "name" : "John"
    "age" : "30"
 }

对于"来电者1"响应应该像

 {
    "id" : "111"
    "name" : "John"
    "age" : "null"
 }

对于"来电者2"响应应该像

{
    "id" : "111"
    "name" : "null"
    "age" : "30"
}

在上面的响应JSON中," null"意味着,这些属性不会暴露给此类呼叫者。

我正在寻找一种实现控制器响应REST响应的方法。

2 个答案:

答案 0 :(得分:5)

服务器端的实现严重依赖于底层服务器技术堆栈(REST API,DB,用户的角色层等)。在某些配置中,您在REST层中定义数据授权,而在REST层中定义其他数据授权。 实现字段级授权是一个棘手的问题,因为并非所有框架都提供这种粒度。

提供这种粒度的一个框架是Jello Framework(我是作者)。 Jello的主要功能之一是其内联授权模型,您可以在任何分辨率(命名空间,实体,字段,操作)为数据元素分配不同的访问级别,并指定谁有权通过REST API访问数据。

例如 - 我们假设你想揭露“年龄”。仅对记录所有者和站点管理员字段。在Jello中,它看起来像这样:

public class Person extends JelloEntity {
   @Expose @KeyElement 
   Integer  id;

   @Expose 
   String name;

   @Expose({Role.OWNER, Role.ADMIN}) 
   Integer age;
}

答案 1 :(得分:1)

我过去有类似的要求,其中权限在字段级别是精细的。

我为每个实体实现了Rest响应编写器。我传递了调用用户有权访问的该实体的字段列表。使用列表,在响应编写器中,我过去只输出用户有权访问的字段。

我曾经从实体输出地图/列表结构。杰克逊随后将结构编组为JSON。