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

在搭载Jetty嵌入式服务器的Spring Cloud Zuul过滤器中如何获取HTTP2帧设置

问题背景

我目前正在开展一项安全领域的项目,研究各类HTTP被动指纹识别技术。我计划用于指纹识别的请求维度包括client hello、header顺序、HTTP2帧设置、HTTP2伪头顺序。目前我已经通过扩展Jetty的org.eclipse.jetty.util.ssl.SslContextFactory.Server类封装SSLEngine实例,实现了从client hello中获取密码套件、压缩方法和扩展的方案,可在Zuul过滤器中按如下方式访问client hello数据:

private static final String SSL_SESSION_ATTRIBUTE = "org.eclipse.jetty.servlet.request.ssl_session";

@Override
public Object run() {
    RequestContext ctx = RequestContext.getCurrentContext();
    HttpServletRequest request = ctx.getRequest();

    SSLSession sslSession = (SSLSession) request.getAttribute(SSL_SESSION_ATTRIBUTE);
    ClientHello clientHello = (ClientHello) sslSession.getValue("client-hello");
        
    return null;
}
问题描述

虽然Spring、Netflix Zuul、Jetty嵌入式服务器均有完善的文档,但我暂未找到与上述方案类似的HTTP2帧设置获取方案,希望能得到可行的实现思路。


实现思路

你可以沿用扩展Jetty核心组件的思路落地,具体步骤如下:

  • 扩展Jetty的HTTP2连接处理类:继承org.eclipse.jetty.http2.server.HTTP2ServerConnection,重写onSettings方法捕获客户端上报的SETTINGS帧全量参数,重写onHeaders方法统计请求伪头的排序规则,这两类数据就是你需要的HTTP2核心指纹维度。
  • 绑定指纹数据到会话:将采集到的HTTP2指纹对象存入当前连接对应的SSL会话属性中,自定义存储key例如http2-fingerprint,和你之前存储ClientHello的逻辑对齐,避免额外的上下文传递链路。
  • 替换默认连接工厂:自定义实现HTTP2ServerConnectionFactory,重写newConnection方法返回你扩展后的HTTP2连接实例,再将这个自定义工厂配置到Jetty的HTTP2连接器中,替换原有默认实现。
  • Zuul过滤器侧无需做大幅改动,和你读取ClientHello的逻辑一致,直接从SSL会话中读取你存入的HTTP2指纹对象即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:45:01