我们在Spring Boot 2应用程序中使用基于令牌的身份验证(使用Spring Security)。现在我要介绍Spring Boot Actuator。我想将/health
端点配置为在没有任何权限的情况下可见,但仅在授权时显示运行状况检查详细信息。
我发现属性management.endpoint.health.show-details=when_authorized
应该是有帮助的,但现在我正在与Spring Security配置斗争,以便让每个人都能看到:
{
"status": "UP"
}
在/actuator/health
下,授权使用令牌的用户应该看到:
{
"status": "UP",
"details": { ... }
}
你有没有遇到类似的问题?你是怎么处理的呢?
好的,现在我明白了,如果你关闭你的应用程序中的安全性并保持management.endpoint.health.show-details=when_authorized
你只得到status
字段?如果我是对的,这不是一个问题,请看看春季课HealthWebEndpointResponseMapper
进入map
方法。我发现如果details
中的条件为真,则此方法会覆盖(从响应中删除if
字段):
public WebEndpointResponse<Health> map(Health health, SecurityContext securityContext,
ShowDetails showDetails) {
if (showDetails == ShowDetails.NEVER
|| (showDetails == ShowDetails.WHEN_AUTHORIZED
&& (securityContext.getPrincipal() == null
|| !isUserInRole(securityContext)))) {
health = Health.status(health.getStatus()).build();
}
Integer status = this.statusHttpMapper.mapStatus(health.getStatus());
return new WebEndpointResponse<>(health, status);
}
在你的情况下,我猜你已经为when_authorized
设置了一个上述属性,你也关闭了身份验证,因此主体为null。不确定我是否正确,但我希望我能给你一个线索。 :)