springserver.forward-headers-strategy原生vs框架

cmssoen2  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(739)

我最近将SpringBoot从1.5升级到了2.4,并且在生成hateoas链接时遇到了这个问题 http 计划代替 https .
后来我发现,对于SpringBoot2.2+,必须使用以下属性

server.forward-headers-strategy=NATIVE

哪一个可以有一个 NATIVEFRAMEWORKNONE . NONE 属性是非常直接的,它完全禁止使用前向标头。
但没有关于这一问题的明确文件 NATIVE vs FRAMEWORK . 我在很多地方都看到有人提到 NATIVE 在大多数情况下效果最好。但是当我们使用这些属性时,没有解释在幕后到底发生了什么。
我正在使用带有外部tomcat和 Hateoas 用于生成链接。
我如何决定是否使用 NATIVEFRAMEWORK 财产?什么时候应该选择其中一个,为什么?
我已经试过了:
https://github.com/spring-projects/spring-boot/issues/18667
https://github.com/spring-projects/spring-boot/wiki/spring-boot-2.2-release-notes#deprecations-in-spring-boot-22
https://docs.spring.io/spring-framework/docs/5.1.3.release/spring-framework-reference/web.html#filters-转发头

uz75evzq

uz75evzq1#

FRAMEWORK 使用spring的支持来处理转发的头。例如,spring boot会创建一个 ForwardedHeaderFilter SpringMVC的bean。

@Bean
@ConditionalOnMissingFilterBean(ForwardedHeaderFilter.c- [Spring web forwarded headers](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#filters-forwarded-headers)lass)
@ConditionalOnProperty(value = "server.forward-headers-strategy", havingValue = "framework")
public FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
    ForwardedHeaderFilter filter = new ForwardedHeaderFilter();
    FilterRegistrationBean<ForwardedHeaderFilter> registration = new FilterRegistrationBean<>(filter);
    registration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.ERROR);
    registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return registration;
}

如果使用spring hateoas, FRAMEWORK 建议使用。 NATIVE 使用基础容器对转发头的本机支持。底层容器指tomcat、jetty、netty等。

参考文献

serverproperties.forwardheadersstrategy javadoc
spring-hateoas转发头处理

相关问题