Jetty 12升级后如何获取HttpServletRequest/Response适配Jakarta Filter
解决Jetty 12.x中获取Jakarta HttpServletRequest/Response调用Filter的问题
核心思路
Jetty 12.x采用统一的请求响应模型,通过as(Class)方法可将Jetty原生的Request/Response转换为Jakarta EE技术栈的适配对象,以此对接Jakarta规范的Filter。
步骤与代码示例
对齐依赖与API版本
替换旧的javax.servlet相关依赖为Jakarta版本,同时引入Jetty 12的Jakarta Servlet模块(以Maven为例):<dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-jakarta-servlet</artifactId> <version>12.0.x</version> </dependency> <!-- 自定义Filter依赖的Jakarta Servlet API --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency>转换请求响应并调用Filter
在Jetty 12的handle方法中,通过as()方法获取Jakarta规范的实例,再调用Filter的doFilter方法:import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Response; import org.eclipse.jetty.server.handler.AbstractHandler; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; public class CustomHandler extends AbstractHandler { private final Filter customJakartaFilter; private final FilterChain customFilterChain; public CustomHandler(Filter customJakartaFilter, FilterChain customFilterChain) { this.customJakartaFilter = customJakartaFilter; this.customFilterChain = customFilterChain; } @Override public void handle(Request request, Response response, Callback callback) throws Exception { // 转换为Jakarta规范的请求响应对象 HttpServletRequest jakartaRequest = request.as(HttpServletRequest.class); HttpServletResponse jakartaResponse = response.as(HttpServletResponse.class); // 调用Jakarta Filter的doFilter方法 customJakartaFilter.doFilter(jakartaRequest, jakartaResponse, customFilterChain); // 通知Jetty请求处理完成,避免请求挂起 callback.succeeded(); } }关键注意事项
- 自定义Filter必须实现
jakarta.servlet.Filter接口,不能再使用旧的javax.servlet.Filter。 - 自定义
FilterChain需基于jakarta.servlet.FilterChain实现。 - 若转换对象失败,检查Server配置是否使用了Jakarta版本的
ServletContextHandler(引入jetty-jakarta-servlet模块后默认适配Jakarta)。
- 自定义Filter必须实现
内容的提问来源于stack exchange,提问作者user23628217
相关产品推荐
相关产品推荐

