我在我的项目中使用Spring Boot,Spring Security Oauth和Spring Security,这是一个REST服务器,从它的控制器方法返回ResponseEntity<>
。
现在,当我向返回@PostFilter
的控制器方法添加ResponseEntity<Iterable<WebUser>>
注释时,执行随后失败,因为方法filter(Object filterTarget, Expression filterExpression, EvaluationContext ctx)
只能处理类型Collection
和{{}的对象1}}。它无法从ResponseEntity中提取集合。
现在我的答案是扩展Array
实现过滤器方法,从ResponseEntity中提取并使用扩展DefaultMethodSecurityExpressionHandler
的{{1}}类并覆盖@EnableGlobalMethodSecurity
方法来使用它
如果我不使用Spring Security OAuth,上面会有效,因为我发现GlobalMethodSecurityConfiguration
创建了自己的createExpressionHandler()
,然后我的自定义版本就不会被创建。
解决方案是将整个OAuth2MethodSecurityConfiguration
类复制到我的项目中并更改一行以使其创建OAuth2MethodSecurityExpressionHandler
,从而提取OAuth2MethodSecurityConfiguration
,但这个解决方案对我来说似乎有些惹恼。
所以,最后我想询问是否有更好的方法来解决这个问题。也许我从一个不好的角度去做,错过了一个更简单的解决方案。
编辑:解决这个问题当然也是一个选择,但我主要是寻找其他(更清洁)的方法来配置Spring @PostFilter来处理ResponseEntity&lt;&gt; (如果有的话)更好地了解Spring Boot的整体情况。答案 0 :(得分:0)
在服务级别过滤数据
@Service
class TamasServiceImpl implement TamasService{
@PostFilter
public Iterable<TamasUser> loadAll(){
// return you data here
}
}
然后在控制器
@Autowired
TamasService service;
@Get
public ResponseEntity<Iterable<TamasUser>> loadAll(){
return new ResponseEntity<>(service.loadAll(),HttpStatus.FOUND)
}