使用Jersey进行动态实例级授权(基于id)

时间:2013-08-13 08:25:35

标签: java jersey jax-rs

道歉,因为我对泽西很新。我一直试图找到一种使用Jersey资源进行实例级访问授权的方法,但我看到的最细粒度是角色或静态实例级权限。我有点困惑,因为它

更好地描述我的意思:假设用户拥有一组Post资源 - 可能这个用户具有Author作用。但是,我不希望作为作者的每个用户都能够修改每个帖子。控制它的最简单方法是什么?

这是在资源类方法中处理的那种授权吗?我应该创建自定义授权过滤器吗?如果是的话,那里有这样的事情的例子吗?我有点困惑,因为它似乎是一个常见的用例。

谢谢!

1 个答案:

答案 0 :(得分:4)

在示例方面没有太多的原因是,关于如何处理这个问题可能取决于你自己的数据模型。

举一个简单的例子,如果每个帖子都有一个所有者,那么你的资源可能看起来像这样:

@PUT
@Path("{id: [A-Fa-f0-9]+}")
@Consumes(MediaType.APPLICATION_JSON)
public T update(@Context HttpServletRequest request, final T item, @PathParam("id") final String id)
{
  final Post post = getPostbyId(id);
  if (!post.allowedToUpdate(request.getUserPrincipal())
  {
    throw new UnauthorizedException();
  }
  // Authorized, carry on
}

此主题没有变化的结尾,但如果您正在进行资源级授权,您可能希望以这种方式执行此操作,在此情况下获取给定其ID的资源,然后确定用户是否有权进行所要求的操作。