Spring Boot Admin是个很不错的针对Spring Boot应用的开源框架,通过actuator可以很方便的监控应用的运行状态、动态的变更全局配置属尾、监控请求等等……
在做项目时,遇到了个问题:不同的应用,Environment Manager节点有可能显示或不显示;后续经过排查后,发现是由options的预检查请求,在某个应用上,被当做跨域请求来处理,没有添加响应头“Allow”导至SBA不显示Environment Manager节点;
查看SBA的前端源码可以看到,Environment Manager节点显不显示,主要是看响应头“Allow”中是否有值并且是否支持post方法,如下:
vue文件:/views/env/index.vue
......
async determineEnvManagerSupport() {
try {
this.hasEnvManagerSupport = await this.instance.hasEnvManagerSupport();
} catch (error) {
console.warn('Determine env manager support failed:', error);
this.hasEnvManagerSupport = false;
}
}
......
js文件:/service/instance.js
async hasEnvManagerSupport() {
const response = await this.axios.options(uri`actuator/env`);
return response.headers['allow'] && response.headers['allow'].includes('POST');
}
解决方案:
参考正常显示“Environment Manager”节点的应用,在/actuator/env的请求的响应头“Allow”增加值“DELETE,GET,POST,HEAD”即可;