[spring-projects/spring-boot]为 Undertow 的更多服务器选项提供配置属性

2024-04-10 469 views
8

目前,对于 Undertow,我没有看到设置许多 HTTP 连接器设置的方法,例如最大请求参数和最大标头大小。我看到的唯一可用参数在这里:

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

许多应用程序需要将请求参数的最大数量增加到高于 Undertow 设置的默认值。

财产 描述
最大参数 允许的查询或路径参数的最大数量。此限制的存在是为了防止基于哈希冲突的 DOS 攻击。
最大标头数 允许的最大标头数。此限制的存在是为了防止基于哈希冲突的 DOS 攻击。
最大cookies 允许的最大 cookie 数量。此限制的存在是为了防止基于哈希冲突的 DOS 攻击。
允许编码斜杠 如果您希望服务器解码百分比编码的斜杠字符,请将此设置为 true。这可能是一个坏主意,因为它可能会产生安全隐患,因为不同的服务器对斜杠的解释不同。仅当您有需要它的旧应用程序时才启用此功能。
解码网址 如果 URL 应该被解码。如果未将其设置为 true,则 URL 中的百分比编码字符将保持原样。
url 字符集 将 URL 解码为的字符集。
始终设置保持活动状态 即使规范没有要求,是否应将“Connection: keep-alive”标头添加到所有响应中。
不允许的方法 不允许的 HTTP 方法的逗号分隔列表。 HTTP TRACE 默认情况下处于禁用状态。

回答

8

虽然我们不提供这些属性,但可以使用UndertowBuilderCustomizer添加到 Undertow 工厂并在Builder.

我们将检查没有配置属性的设置,并查看要为其添加一个(如果有)。

5

@wilkinsona 非常好,我很感谢您的考虑。我认为 3 个“最大”参数肯定有意义,而其他参数可能就没那么有意义了。

8

如果团队决定添加道具,那么我会很乐意工作,除非 @melloware 想要这样做 ☺️

9

@rhamedy 这都是你的!

8

感谢您的提议,@rhamedy。我们决定添加所有缺失的属性。您还有兴趣贡献此更改吗?

9

是的@wilkinsona,我很乐意做出我的第一个春季靴贡献。从事这项工作时有什么我应该记住的吗?

6

谢谢,@rhamedy。我认为没有什么需要记住的重大问题。不确定您是否需要它们,但这里有一些关于需要进行更改的提示:

再次感谢。如果您有任何疑问,请随时提问。

4

@wilkinsona 感谢您的指点。在我推动更改之前,很高兴听到您对以下方面的反馈

  • io.undertow.UndertowOptionsofundertow-core-2.0.19.Final.jar没有列表,disallowed-methods因此无法映射 中的属性UndertowWebServerFactoryCustomizer。我们应该忽略它还是有其他方法来实现它?

  • UndertowWebServerFactoryCustomizer编写了一个可重用的定制器,如下所示(而不是为每个编写一个私有方法UndertowOption

private <T> void customizeProperties(ConfigurableUndertowWebServerFactory factory,
             Option<T> propType, T prop) {
      factory.addBuilderCustomizers((builder) -> builder.setServerOption(propType, prop));
}

我已对所有新添加的UndertowOptions.x.有异议吗?如果没有,那么我想用这个版本替换现有的方法。

  • 最后,我想要以下 static import所有字段UndertowOptions
    import static io.undertow.UndertowOptions.*;

    或者

    import static io.undertow.UndertowOptions.MAX_PARAMETERS;
    and so on ... others used

    这方面的最佳实践是什么?如果这是可以接受的,那么我将在测试类中执行相同的操作,并且应该缩短lines代码。

1

disallowed-methods是一个有趣的选项,因为它的配置与其他选项不同。它是使用一个DisallowedMethodsHandler.我不确定TRACEUndertow 中默认情况下不允许这样做,并且怀疑这可能是 JBoss Wildfly 的默认情况。 @melloware,您的开场评论中表格中的文本来源是什么?

有异议吗?如果没有,那么我想用这个版本替换现有的方法。

一个都没有。我喜欢定制可重复使用的想法。

我们不在*Boot 中使用导入(如果您尝试这样做,Checkstyle 会抱怨)。请遵循当前代码的导入方式UndertowOptions和常量引用方式等UndertowOptions.MAX_ENTITY_SIZE

4

根据做出的决定,disallowed-methods我将相应地更新 PR。现在我推了没有disallowed-methods属性的 PR。 @威尔金索纳^

1

谢谢你,@melloware。正如所怀疑的,该文档描述的是 Wildfly 的默认设置,而不是 Undertow 的默认设置。

disallowed-methods@rhamedy 我认为我们现在不需要做任何事情。感谢您的 PR,我将关闭此问题以支持它。

1

感谢您添加更多属性,我们希望通过 Spring Boot Undertow Web 服务器配置最大并发连接数。我们还没有找到任何相关配置,但我们在 Undertow 服务器的代码中找到了这些CONNECTION_HIGH_WATER, CONNECTION_LOW_WATER,配置。BACKLOG是否可以将这些参数设置为可配置?谢谢。

2

@kosurusekhar 目前我们似乎没有为 提供任何属性Undertow.Builder.setWorkerOption。如果您希望我们添加支持,请打开一个新问题。与此同时,你可以使用UndertowBuilderCustomizer豆子。