You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus反应式上下文下ServerRequestFilter中使用Keycloak客户端触发BlockingNotAllowedException问题求助

Quarkus反应式上下文下ServerRequestFilter中使用Keycloak客户端触发BlockingNotAllowedException问题求助

各位大佬好,我最近在基于Quarkus做反应式开发时遇到了一个棘手的问题,想请教下大家的解决方案!

我当前使用的技术栈是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();
                });
    }
}

我尝试过给Uni添加runSubscriptionOn(Infrastructure.getDefaultWorkerPool())来切换线程池,但报错依然存在。另外需要说明的是,我不能将请求改成阻塞式的,因为我希望所有端点都保持反应式的特性,避免阻塞事件循环。

我自己猜测问题可能出在过滤器的上下文环境或者Keycloak客户端的注入环节,但反复排查也没找到确切的问题点,希望有经验的朋友能帮忙分析下原因,或者给出可行的解决思路!

备注:内容来源于stack exchange,提问作者Tiago Grosso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:04:07