使用 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。
我目前正在使用 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。