如何在 Jetty 中启用紧凑路径过滤器

问题描述 投票:0回答:1

我正在尝试修复基于嵌入式 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 项目中似乎不存在这些文件。

jetty embedded-jetty jetty-12
1个回答
0
投票

CompactPathRule 无法修复 UriCompliance 违规。

这种违规行为是根本性的,不会发生请求的调度/处理。

用于调整

UriCompliance
配置的代码是正确的路径。

但请注意,Jetty 12/ee10、Servlet 6 规范、REST 规范和 Spring Boot 100% 不支持。

© www.soinside.com 2019 - 2024. All rights reserved.