繁体   English   中英

春季安全授权

[英]Spring Security Authorization

我有一个Spring Web服务,用户只能访问特定资源。 任何用户都可以请求获取资源信息,但是如果他们无权访问该资源,则需要抛出一个Authorization异常。 API如下:

GET /resources/{resourceId}

上面的API为用户提供了有关给定资源的所有信息。

目前,我使用WebSecurityConfigurerAdapter进行身份验证。 为了添加授权,我发现可以将授予的授权设置为Authentication对象的一部分。 这样做时,我可以使用类似@PreAuthorize("hasRole('ROLE_USER')")方法进行授权。

但是,对于所提到的API,由于以下原因,我不确定所提到的授权方法是否适合。

  1. 我根据用户是否具有访问特定resourceId特权进行授权。 这不完全是角色。 更像是特权。 在此用例中使用hasRole()是否仍然可以接受?
  2. 如果确实使用hasRole()批注,则需要执行类似@PreAuthorize("hasRole('ACCESS_RESOURCEID12346')") ,其中RESOURCEID12346resourceId 但是,只有进入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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM