[英]Spring Security Authorization
我有一个Spring Web服务,用户只能访问特定资源。 任何用户都可以请求获取资源信息,但是如果他们无权访问该资源,则需要抛出一个Authorization异常。 API如下:
GET /resources/{resourceId}
上面的API为用户提供了有关给定资源的所有信息。
目前,我使用WebSecurityConfigurerAdapter
进行身份验证。 为了添加授权,我发现可以将授予的授权设置为Authentication对象的一部分。 这样做时,我可以使用类似@PreAuthorize("hasRole('ROLE_USER')")
方法进行授权。
但是,对于所提到的API,由于以下原因,我不确定所提到的授权方法是否适合。
resourceId
特权进行授权。 这不完全是角色。 更像是特权。 在此用例中使用hasRole()
是否仍然可以接受? hasRole()
批注,则需要执行类似@PreAuthorize("hasRole('ACCESS_RESOURCEID12346')")
,其中RESOURCEID12346
是resourceId
。 但是,只有进入API控制器后,我们才能访问resourceId
。 那么,如何使用该值作为授权注释? 如果指定的方法不是解决问题的最佳方法,那么我将不胜感激,对最好的方法进行任何输入/反馈。 我想避免在控制器中执行此检查。 我正在尝试通过类似于@PreAuthorize的工作原理通过Spring Security进行操作。 我认为访问resourceId是一项授权要求,如果用户无权访问该资源,我们甚至不应该进入API控制器。
通过绑定到资源ID的角色来分配权限似乎是潜在的维护噩梦。 如果您不想允许访问控制器,则最好使用access
。
上面的链接提供了基于Java和xml的配置示例,并显示了如何在进入控制器之前获得对路径的访问。
您将提供一种您引用的方法,例如:
boolean checkResourceAccess(Principal principal, int resourceId)
在配置中,您引用url参数,例如#resourceId
将其映射到{resourceId}
。
Java配置示例:
http.authorizeRequests()
.antMatchers("/resources/{resourceId}")
.access("@yourBean.checkResourceAccess(principal,#resourceId)")...
在这种方法中,您可以提供确定用户访问权限所需的任何逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.