使用 Spring 安全过滤器链以编程方式从应用程序内部验证用户授权

Verifying user authorization from inside the application with Spring Security Filter Chain programmatically

我目前正在使用 Spring Boot 1.4.2.RELEASE 和 Spring Security 4.1.3.RELEASE 开发应用程序。该应用程序具有 Rest 控制器并接收和响应 json 消息。此应用程序将与 Angular 应用程序通信。 我已经拥有身份验证和授权,可以使用以下配置:

http.authorizeRequests()
    .antMatchers(HttpMethod.POST, "/foo/bar/**")
        .access("(hasRole('OPERATOR') && hasRole('MAKER')) || hasRole('ADMIN')")
    .anyRequest().authenticated()
    .and()
    .httpBasic();

RestControllers 方法中的规则如下:

@PreAuthorize("hasRole(#id) || hasRole('ADMIN')")

一切正常,现在我正在添加 Spring Hateoas。 我知道 Hateoas 与用户对资源的授权无关,但我希望能够向 angular 应用程序发送附加信息。不仅是资源的 link,还有用户有权访问的操作(http 动词)。

我这样做并不是为了提高应用的安全性,只是为了提高用户体验。在 Angular 应用程序中,我希望能够根据服务器发送的内容激活或停用功能。

所以我的问题来了,Spring 安全性中是否有任何可用的 class 我可以自动装配以测试 URL 并查看用户是否有权执行针对该特定内容的特定操作 URL?

到目前为止,我测试过的 Spring 安全文档中提到的所有 classes 都无法被 @Autowire 注释识别。

有趣的问题,看看 WebInvocationPrivilegeEvaluator 它可能适合您的需要。

isAllowed(String contextPath, String uri, String method, Authentication authentication)

您可以看到它的实际效果,例如 here