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

Quarkus框架下调用RoutingContext.session()返回null问题咨询

问题原因
  • Quarkus默认不会自动开启Session支持,不属于开箱即用能力,缺少SessionHandler注册和对应依赖会导致RoutingContext.session()返回null
  • 你当前的RoutingContext注入方式错误:JAX-RS Resource默认是单例作用域,将请求级的RoutingContext注入到构造函数作为类成员,会导致上下文失效,无法拿到当前请求的会话信息
修复步骤

1. 引入必要依赖

Maven的pom.xml里添加:

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-vertx-http</artifactId>
</dependency>

2. 全局注册SessionHandler

创建自定义路由配置类,将SessionHandler注册到全局路由链,示例如下:

import io.quarkus.vertx.http.RouteCustomizer;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.SessionHandler;
import io.vertx.ext.web.sstore.LocalSessionStore;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;

@ApplicationScoped
public class SessionConfig {

    @Produces
    public RouteCustomizer sessionHandlerCustomizer() {
        return router -> {
            // 注册会话处理器,使用本地存储,生产环境可替换为Redis等分布式存储
            SessionHandler sessionHandler = SessionHandler.create(LocalSessionStore.create(router.vertx()));
            // 自定义会话超时时间,单位毫秒,示例为30分钟
            sessionHandler.setSessionTimeout(1800000);
            router.route().order(-1).handler(sessionHandler);
        };
    }
}

分布式部署场景下将LocalSessionStore替换为对应分布式存储的SessionStore实现即可

3. 修正Resource代码的上下文注入方式

不要在构造函数注入RoutingContext,改为在请求方法的参数中注入:

import io.vertx.ext.web.RoutingContext;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.Response;
import org.jboss.logging.Logger;

@Path("/callback")
public class CallbackResource {

    private static final Logger logger = Logger.getLogger(CallbackResource.class);

    @GET
    public Response callback(@Context RoutingContext routingContext) {
        logger.infof("session id %s", routingContext.session().id());
        return Response.ok().build();
    }
}

内容的提问来源于stack exchange,提问作者joeng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:36:00