Ron*_* Jr 3 spring-boot-actuator
Spring Boot 的执行器基础端点返回 json 和所有启用端点的 href 链接。这些链接都默认为 localhost:8080,但我使用主机名(例如 machine.mydomain.com)进行了身份验证。
如何获取链接以使用https://machine.mydomain.com而不是http://localhost:8090填充?
我访问https://machine.mydomain.com/actuator时执行器的输出示例
/ 20181012150557
// https://machine.mydomain.com/actuator
{
"_links": {
"self": {
"href": "http://localhost:8090/actuator",
"templated": false
},
"beans": {
"href": "http://localhost:8090/actuator/beans",
"templated": false
},
"health": {
"href": "http://localhost:8090/actuator/health",
"templated": false
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是 / 20181012150557 // https://machine.mydomain.com/actuator
{
"_links": {
"self": {
"href": "https://machine.mydomain.com/actuator",
"templated": false
},
"beans": {
"href": "https://machine.mydomain.com/actuator/beans",
"templated": false
},
"health": {
"href": "https://machine.mydomain.com/actuator/health",
"templated": false
}
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序遇到了同样的问题。Spring Boot 使用当前请求 URL 在执行器主页上生成超媒体链接。
见WebMvcEndpointHandlerMapping:
@Override
@ResponseBody
protected Map<String, Map<String, Link>> links(HttpServletRequest request,
HttpServletResponse response) {
return Collections.singletonMap("_links",
this.linksResolver.resolveLinks(request.getRequestURL().toString()));
}
Run Code Online (Sandbox Code Playgroud)
如果您在代理(Apache、nginx)后面,则真正的请求 URL 可能会移动到X-Forwarded-*标头。最简单的解决方案是ForwardedHeaderFilter为执行器端点添加 Spring ,如下所示:
@Bean
public FilterRegistrationBean forwardedHeaderFilter() {
final FilterRegistrationBean<ForwardedHeaderFilter> filter = new FilterRegistrationBean<>(new ForwardedHeaderFilter());
filter.setName("Forwarded Header filter");
filter.setUrlPatterns(Collections.singletonList("/actuator/*"));
return filter;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1492 次 |
| 最近记录: |