具有自定义范围/角色的安全Spring Boot应用程序

时间:2016-04-26 14:37:00

标签: java spring spring-security spring-boot oauth-2.0

在我的Jersey应用程序中,我使用了@RolesAllowed("my-scope-or-role-name")以及如何从请求中读取范围以确保授权的实现。例如。当HTTP标头my-role-header的值为my-scope-or-role-name时,我正在处理请求。

@RolesAllowed("my-scope-or-role-name")
public ResponseEntity<Object> post(@RequestBody final String plainText) {
 // process request
}

由于服务位于代理后面,因此只有此代理可以设置my-header的值,具体取决于它获得的访问令牌。

在Spring Boot中解决此问题的惯用方法是什么?我还阅读了关于使用@Secured注释的内容......但是@RolesAllowed()似乎非常直接。

1 个答案:

答案 0 :(得分:0)

免责声明:不是专家。

首选方法似乎是使用@PreAuthorize注释。

这个东西接受SpEL表达式,然后允许你(假设已经正确配置了所有的安全性和oauth2内容 - 例如需要启用全局方法级安全性)来做有趣的事情,如:

@PreAuthorize("#oauth2.hasScope('read') and hasAuthority('USER')")

我(谦卑地)也建议您的REST端点是服务类的瘦包装(然后执行实际工作)。然后将安全注释推送到那些服务类(或它们的接口 - 显然你可以注释接口,它仍然可以工作)。

这应该更安全,因为没有任何东西可以进入&#34;工作&#34;代码没有适当的安全许可。