Jetty配置setSendServerVersion(false)未隐藏Server响应头版本问题求助
Jetty响应头Server字段移除方案
问题根因
你调用setSendServerVersion(false)未生效的核心原因是你创建的HttpConfiguration实例没有绑定到Jetty实际运行使用的ServerConnector中,Jetty默认加载的是自身初始化的默认配置实例,你单独修改的实例并未生效。
解决方案
方案1:正确绑定HttpConfiguration到连接器
修改Jetty启动代码,确保自定义的HttpConfiguration关联到实际使用的连接器,示例代码如下:
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; public class JettyServer { public static void main(String[] args) throws Exception { Server server = new Server(); // 自定义HTTP配置 HttpConfiguration httpConfig = new HttpConfiguration(); httpConfig.setOutputBufferSize(32768); // 关闭Server版本输出 httpConfig.setSendServerVersion(false); // 可选:关闭X-Powered-By字段输出 httpConfig.setSendXPoweredBy(false); // 将自定义配置绑定到连接器 ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfig)); httpConnector.setPort(8080); server.setConnectors(new ServerConnector[]{httpConnector}); server.start(); server.join(); } }
方案2:新增全局过滤器强制移除Server头
如果方案1不生效或你无法修改Jetty启动配置,可以新增全局过滤器强制清除响应头中的Server字段:
- 实现过滤器类
import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class RemoveServerHeaderFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) response; chain.doFilter(request, response); // 强制覆盖/移除Server字段 httpResponse.setHeader("Server", ""); // 若为Jetty原生响应,可直接调用移除API: // ((org.eclipse.jetty.server.Response) response).getHttpFields().remove("Server"); } }
- 注册过滤器到Jetty上下文
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); // 注册过滤器,匹配所有请求路径 context.addFilter(RemoveServerHeaderFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST)); server.setHandler(context);
方案3:配置全局系统属性(终极方案)
启动服务时添加JVM启动参数,全局强制关闭Server版本输出,优先级高于代码配置:
-Dorg.eclipse.jetty.server.Response.sendServerVersion=false
内容的提问来源于stack exchange,提问作者Omsairam
相关产品推荐
相关产品推荐

