Java JAX-RS和资源所有权限制
关于如何设置JAX-RSAPI,有很多很好的资源和文献。然而,我还没有找到任何资源正确地描述如何对特定资源和方法进行安全限制。例如,给定一个资源Java JAX-RS和资源所有权限制,java,web-services,rest,jax-rs,Java,Web Services,Rest,Jax Rs,关于如何设置JAX-RSAPI,有很多很好的资源和文献。然而,我还没有找到任何资源正确地描述如何对特定资源和方法进行安全限制。例如,给定一个资源PictureResource,只有图片上传者(和管理员)可以删除或更改与图片相关的属性,而任何人都可以查看图片。管理员限制是可以解决的,但是上传程序将取决于调用的上下文。然后,标识用户的令牌将描述谁在打电话。这可以通过一个解决方案来解决 JAX-RS解决这个问题的方法是什么?我假设这可以通过注释来解决,但如何做到这一点对我来说相当模糊。另一种方法是根据
PictureResource
,只有图片上传者(和管理员)可以删除或更改与图片相关的属性,而任何人都可以查看图片。管理员限制是可以解决的,但是上传程序将取决于调用的上下文。然后,标识用户的令牌将描述谁在打电话。这可以通过一个解决方案来解决
JAX-RS解决这个问题的方法是什么?我假设这可以通过注释来解决,但如何做到这一点对我来说相当模糊。另一种方法是根据调用的上下文动态地为用户分配PictureOwnError吗 问题在于离散资源访问控制。您需要一种标准的方式来描述所访问的资源的所有权。谁拥有资源,谁被授予了对资源的作用域权限 问题是,这是非常特定于领域的。资源分组和所有权要求能够查找资源实例或相关元数据,并确定所有权/访问要求 我不知道有哪种安全框架能为此提供标准框架或注释 您可以将图片放入目录结构中,并使用目录访问控制来确定哪些用户有权访问资源
类似于
@Secured(“ownerDecider=pictureininspector.class”)
的东西将是我处理它的方式。spring security中的AccessDecisionVoter
或AfterInvocationProvider
可以使用提供的策略来识别所有权,并相应地限制访问。您是否看到,这篇文章几乎是我在文章中获得的第二个链接,但更详细。在我的例子中,我想根据调用的上下文进行限制。例如,允许登录并上载图片的用户删除图片。由于您知道调用您的端点并上载图片的用户,因此我认为方法中的一个简单的if
条件可以实现此目的。而且,如果不允许用户执行该操作,只需抛出一个.SecurityContext&Principal即可。它很可能是您要使用的:/Principal
可以是表示用户的自定义类,您可以将其插入到方法中,然后自己检查是否允许该用户。该检查需要自定义逻辑,因为资源没有自然所有权。您还可以在@CássioMazzochiMolin创建一个授权过滤器,我知道这一点,但这是我解决此问题的最后手段,因为我确实希望尽可能避免混合业务逻辑和验证逻辑。
@Path("pictures/{pictureId}")
public class PictureResource {
@GET
public Response getPicture(@PathParam("pictureId") final int pictureId) {
// Get the picture, available for all users.
}
@DELETE
public Response deletePicture(@PathParam("pictureId") final int pictureId) {
// Delete the picture, only available for the uploader of the picture and admins.
}
// ...
}