61、Cloud Foundry 支持
当你部署到一个兼容 Cloud Foundry 的实例时,Spring Boot 的 Actuator 模块包含的其他支持将被激活。/cloudfoundryapplication
路径为所有 @Endpoint
bean 提供了另外一个安全路由。
该扩展支持允许使用 Spring Boot Actuator 信息扩充 Cloud Foundry 管理 UI(例如可用于查看已部署应用的 Web 应用)。比如,应用程序状态页面可以包括完整的健康信息而不是常见的 running 或 stop 状态。
注意
常规用户无法直接访问
/cloudfoundryapplication
路径。为了能访问端点,你必须在请求时传递一个有效的 UAA 令牌。
61.1、禁用 Cloud Foundry Actuator 扩展支持
如果要完全禁用 /cloudfoundryapplication
端点,可以将以下设置添加到 application.properties
文件中:
application.properties
management.cloudfoundry.enabled=false
61.2、Cloud Foundry 自签名证书
默认情况下,/cloudfoundryapplication
端点的安全验证会对各种 Cloud Foundry 服务进行 SSL 调用。如果你的 Cloud Foundry UAA 或 Cloud Controller 服务使用自签名证书,则需要设置以下属性:
application.properties
management.cloudfoundry.skip-ssl-validation=true
61.3、自定义上下文路径
如果服务器的 context-path 已配置为 /
以外的其他内容,则 Cloud Foundry 端点将无法在应用程序的根目录中使用。例如,如果 server.servlet.context-path=/app
,Cloud Foundry 端点将在 /app/cloudfoundryapplication/*
上可用。
如果你希望 Cloud Foundry 端点始终在 /cloudfoundryapplication/*
上可用,则无论服务器的 context-path 如何,你都需要在应用程序中明确配置它。配置因使用的 Web 服务器而有所不同。针对 Tomcat,可以添加以下配置:
@Bean
public TomcatServletWebServerFactory servletWebServerFactory() {
return new TomcatServletWebServerFactory() {
@Override
protected void prepareContext(Host host,
ServletContextInitializer[] initializers) {
super.prepareContext(host, initializers);
StandardContext child = new StandardContext();
child.addLifecycleListener(new Tomcat.FixContextListener());
child.setPath("/cloudfoundryapplication");
ServletContainerInitializer initializer = getServletContextInitializer(
getContextPath());
child.addServletContainerInitializer(initializer, Collections.emptySet());
child.setCrossContext(true);
host.addChild(child);
}
};
}
private ServletContainerInitializer getServletContextInitializer(String contextPath) {
return (c, context) -> {
Servlet servlet = new GenericServlet() {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
ServletContext context = req.getServletContext()
.getContext(contextPath);
context.getRequestDispatcher("/cloudfoundryapplication").forward(req,
res);
}
};
context.addServlet("cloudfoundry", servlet).addMapping("/*");
};
}