【问题标题】:Dynamic instance-level authorization with Jersey (based on id)Jersey 的动态实例级授权(基于 id)
【发布时间】:2013-08-13 23:46:08
【问题描述】:

抱歉,我对泽西岛还很陌生。我一直在尝试找到一种使用 Jersey 资源进行实例级访问授权的方法,但我看到的最精细的是角色或静态实例级权限。我有点不解,因为它

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

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

谢谢!

【问题讨论】:

    标签: java jersey jax-rs


    【解决方案1】:

    没有太多示例的原因是,如何处理这可能取决于您自己的数据模型。

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

    @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 的情况下获取资源,然后确定用户是否是授权执行请求的操作。

    【讨论】:

      猜你喜欢
      • 2023-02-11
      • 2011-09-28
      • 2015-09-30
      • 2015-01-24
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 2019-09-20
      • 2016-09-11
      相关资源
      最近更新 更多