gpt4 book ai didi

spring - 使用OAuth时如何为不同类型实现Spring Security @PostFilter

转载 作者:行者123 更新时间:2023-12-04 18:01:23 27 4
gpt4 key购买 nike

我在我的项目中使用 Spring Boot、Spring Security Oauth 和 Spring Security,这是一个返回 ResponseEntity<> 的 REST 服务器。来自它的 Controller 方法。

现在当我添加 @PostFilter对返回 ResponseEntity<Iterable<WebUser>> 的 Controller 方法的注释随后执行失败,因为方法 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但这个解决方案对我来说似乎有点老套。

所以,最后我想问问是否有更好的方法来解决这个问题。也许我从一个糟糕的角度出发,错过了一个更直接的解决方案。

编辑:解决这个问题当然也是一种选择,但我主要是在寻找其他(更干净的)方法来配置 Spring @PostFilter 以与 ResponseEntity<>(如果有的话)一起工作,以便更好地理解 Spring Boot整个。

最佳答案

在服务级别过滤数据

@Service
class TamasServiceImpl implement TamasService{
@PostFilter
public Iterable<TamasUser> loadAll(){
// return you data here
}
}

然后在 Controller 中

@Autowired
TamasService service;

@Get
public ResponseEntity<Iterable<TamasUser>> loadAll(){
return new ResponseEntity<>(service.loadAll(),HttpStatus.FOUND)
}

关于spring - 使用OAuth时如何为不同类型实现Spring Security @PostFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34852034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com