首页 > 解决方案 > 如何在 ateoas 中更改主机名

问题描述

我正在尝试修改 Hateoas 中链接的主机名,但它看起来并不直接。关于如何修改它以替换主机名的任何想法?

HalModelBuilder builder = HalModelBuilder.halModelOf(resource)
        .link(linkTo(methodOn(BaseController.class).method1(...))
            .withSelfRel())
        .preview(new SummaryResource(...))
        .forLink(
            linkTo(
                methodOn(RefController.class).method2(...)
                .withRel("blah"));

更新:

我试图用以下代码替换主机名:

HalModelBuilder builder = HalModelBuilder.halModelOf(resource)
        .link(
            Link.of(
                apiGatewayUrl +
                    linkTo(methodOn(BaseController.class).method1(...)).toUri().getPath())
                .withSelfRel())
        .preview(new SummaryResource(...))
        .forLink(
            Link.of(
                apiGatewayUrl +
                    linkTo(methodOn(RefController.class).method2(...)).toUri().getPath())
                .withRel("blah"));

尝试使用 .toUricomponentBuilder() 替换主机名,但 url 构建没有正确进行。因此选择将 gatewayUrl 与 hatoas 生成的路径连接起来。

标签: spring-hateoashateoas

解决方案


似乎您在网关后面使用 Spring HATEOAS。如果您的网关正确设置了标头,并且如果您使用 Spring Boot,请根据Spring Boot 文档x-forwarded-*设置一个属性。然后 为您创建一个bean。server.forward-headers-strategy = frameworkServletWebServerFactoryAutoConfigurationForwardedHeaderFilter

@Bean
@ConditionalOnMissingFilterBean(ForwardedHeaderFilter.class)
@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 生成与您在网关外部看到的具有相同基本 URI(主机名、端口、路径)的链接。请参阅Spring HATEOAS 文档


推荐阅读