【发布时间】:2023-02-14 06:35:44
【问题描述】:
我将 Quarkus 与 quarkus-resteasy-reactive 和 quarkus-keycloak-admin-client-reactive 扩展一起使用。我正在构建一个 ServerRequestFilter 来查询 keycloak 的用户属性,但即使我使用的是反应式客户端,我在调用它的方法时也会得到 BlockingNotAllowedException。
这是过滤器:
public class Filters {
@Inject
Keycloak keycloak;
@ServerRequestFilter
public Uni<Response> filter(ContainerRequestContext requestContext) {
return Uni.createFrom().item(() ->
keycloak.realm("my-realm")
.users()
.search("user-that-i-get-from-context")
.stream()
.findFirst()
.orElseThrow()
.firstAttribute("the-attribute")).map(attr -> {
if (attr.equals("some-value")){
return null;
}
return Response.status(403).build();
});
}
}
我尝试将 runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) 添加到 Uni,但错误仍然存在。
使请求阻塞不是一种选择,因为我希望我的端点是反应性的。
我怀疑问题出在过滤器的上下文和Keycloak 客户端的注入中,但我一直无法查明问题所在
【问题讨论】:
标签: java keycloak quarkus vert.x reactive