我正在尝试修复基于嵌入式 Jetty 构建的 Spring Boot 应用程序中的 AMBIGUOUS_EMPTY_SEGMENT 错误。我想我想使用 https://eclipse.dev/jetty/javadoc/jetty-12/org/eclipse/jetty/rewrite/handler/CompactPathRule.html 但文档并没有真正解释如何启用该规则.
我已经允许这种违规行为,并添加了违规监听器。侦听器永远不会被触发。如果我删除自定义 Uri 合规性,侦听器就会开始获得点击。似乎重写 URL 比真正允许空路径段更容易。 Jetty 上有一张关于此问题的票https://github.com/jetty/jetty.project/issues/11448
HttpConnectionFactory connFac = conn.getConnectionFactory(HttpConnectionFactory.class);
Set<UriCompliance.Violation> violations = new HashSet<>();
violations.add(UriCompliance.Violation.AMBIGUOUS_EMPTY_SEGMENT);
UriCompliance customUriCompliance = new UriCompliance("Custom", violations);
connFac.getHttpConfiguration().addComplianceViolationListener(new ComplianceViolation.Listener() {
@Override
public void onComplianceViolation(ComplianceViolation.Event event) {
ComplianceViolation.Listener.super.onComplianceViolation(event);
System.err.println("COMPLIANCE VIOLATION");
}
});
connFac.getHttpConfiguration().setUriCompliance(customUriCompliance);
Stack Overflow 上的大多数半相关问题都讨论编辑各种 XML 文件,但 Spring Boot 项目中似乎不存在这些文件。
CompactPathRule 无法修复 UriCompliance 违规。
这种违规行为是根本性的,不会发生请求的调度/处理。
用于调整
UriCompliance
配置的代码是正确的路径。
但请注意,Jetty 12/ee10、Servlet 6 规范、REST 规范和 Spring Boot 100% 不支持。