spring-hateoas - 如何在 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 HATEOAS。如果您的网关正确设置了标头,并且如果您使用 Spring Boot,请根据Spring Boot 文档x-forwarded-*
设置一个属性。然后
为您创建一个bean。server.forward-headers-strategy = framework
ServletWebServerFactoryAutoConfiguration
ForwardedHeaderFilter
@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 文档。
推荐阅读
- amazon-web-services - 如何区分 EC2 实例中的实例存储卷与 ebs
- parse-platform - 解析定位服务
- android - 通过代码在垂直LinearLayout中乘RelativeLayout
- excel - 将具有特定标题的工作表列复制到另一个工作表上的不同列中
- django - 如何修复 django 2.1.3 中的“MultiValueDictKeyError”
- attributes - 在android中的多行文本视图上应用的不同滚动条属性的用途是什么?
- python - fancyimpute Python 3 MemoryError
- javascript - 悬停在每个节点上时带有工具提示的 Highchart 网络图
- latex - 渐近线方程项之间的箭头
- node.js - Mongoose 等待 doc.save() 不完整