Mar*_*lze 5 spring-security spring-webflux
假设我们有一个带注释的休息控制器方法:
@PreAuthorize("hasPermission(#username, 'USER_PROFILE', 'WRITE')")
Run Code Online (Sandbox Code Playgroud)
在 Spring MVC 中,我们将实现一个PermissionEvaluator来实现隐藏在以下方法签名后面的授权
boolean hasPermission(
Authentication authentication,
Serializable targetId,
String targetType,
Object permission
)
Run Code Online (Sandbox Code Playgroud)
只要您不需要在 hasPermission 方法中调用反应式服务/方法,这在使用 Spring WebFlux 时似乎仍然有效,我想这种情况很少发生,因为您通常希望为数据库层使用反应式接口以及。如果您无论如何都要在此方法中调用反应式服务,您将需要在某个时间调用block()一些服务Mono,从而遇到麻烦,因为您是从反应式管道中调用的。
在Josh Long关于 Spring WebFlux 安全性的教程中,他解释了如何SecurityWebFilterchain通过提供自定义ReactiveAuthorizationManagers直接在使用路径匹配器上实现授权。但是PreAuthorize在 Spring WebFlux 中没有解释如何使用注解。
我期待实施一些 ReactivePermissionEvaluator
Mono<Boolean> hasPermission(
Authentication authentication,
Serializable targetId,
String targetType,
Object permission
)
Run Code Online (Sandbox Code Playgroud)
这也将允许在实现中使用反应式服务,但我无法找到ReactiveAuthorizationManager可以扫描PreAuthorize注释并将评估分派给反应式的PermissionEvaluator任何实现,ReactivePermissionEvaluator接口也不存在。
所以最后的问题是,如何实现一个PermissionEvaluator允许调用反应式服务的反应式,例如在不阻塞的情况下查询数据库以获取授权信息?
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |