我在我的项目中使用 Spring Boot、Spring Security Oauth 和 Spring Security,这是一个ResponseEntity<>
从它的控制器方法返回的 REST 服务器。
现在,当我将@PostFilter
注释添加到返回ResponseEntity<Iterable<WebUser>>
执行随后失败的控制器方法时,因为方法filter(Object filterTarget, Expression filterExpression, EvaluationContext ctx)
只能与类型Collection
和Array
. 它无法从 ResponseEntity 中提取集合。
现在我的答案是通过DefaultMethodSecurityExpressionHandler
从 ResponseEntity 中提取并通过扩展和覆盖该方法的@EnableGlobalMethodSecurity
类来使用它来扩展实现过滤器方法。GlobalMethodSecurityConfiguration
createExpressionHandler()
如果我不使用 Spring Security OAuth,上面的方法会起作用,因为我发现OAuth2MethodSecurityConfiguration
创建它自己的OAuth2MethodSecurityExpressionHandler
并且我的自定义的然后没有被创建。
解决方案是将整个OAuth2MethodSecurityConfiguration
类复制到我的项目中并更改一行以使其创建MyOAuth2MethodSecurityExpressionHandler extends OAuth2MethodSecurityExpressionHandler
提取的ResponseEntity
但这个解决方案对我来说似乎有点 hacky。
所以,最后对于这个问题,我想问一下是否有更好的方法来解决这个问题。也许我从一个不好的角度去做,错过了一个更直接的解决方案。
编辑:解决这个问题当然也是一种选择,但我主要是在寻找其他(更清洁)的方式来配置 Spring @PostFilter 以与 ResponseEntity<> (如果有的话)一起更好地理解 Spring Boot 的整体。