如何使用Spring Boot 2以编程方式获取所有执行器端点?

时间:2018-10-02 07:40:15

标签: java spring spring-boot spring-boot-actuator

在Spring Boot 1.x中,可以通过编程方式解决所有执行器端点。我有一个可显示所有执行器端点路径的Bean

@Component
public class MyProjectActuatorEndpoints {

    @Autowired
    private MvcEndpoints endpoints;

    public String[] getActuatorEndpointPaths() {
        return endpoints.getEndpoints().stream()
            .map(MvcEndpoint::getPath)
            .map(path -> path + "/**")
            .toArray(String[]::new);
    }
}

不幸的是,在弹簧启动执行器2.0.5.RELEASE中没有此类MvcEndpoints。在新的春季版本中可以替代此类吗?

3 个答案:

答案 0 :(得分:1)

Spring Boot Actuator 2.x将 Intent next_scrn = new Intent(SplashScreen.this,MapsActivity.class); startActivity(next_scrn); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); finish(); 端点公开为可配置的环境变量。

启用Acutator端点

您可以在application.properties中启用这些actuator endpoints

/actuator

或(非常小心)将它们全部启用。请记住,其中许多本质上都是敏感的。

management.endpoints.web.exposure.include=info, health

保护执行器端点 (reference)

文档将其指定为保护所有端点的策略。 management.endpoints.web.exposure.include=* 本身将是您要寻找的(EndpointRequest)的最接近的替代方法

MvcEndpoints

如果您有一个想分配给这些端点的不同策略或角色,也可以设置一个特定的匹配器

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
            .anyRequest().hasRole("ENDPOINT_ADMIN")
            .and()
            .httpBasic();
    }

}

答案 1 :(得分:1)

您需要的一切都在org.springframework.boot.actuate.endpoint.web.PathMappedEndpoints bean中。如果您可以赦免双关语,这应该可以让您走上正确的路:

@Slf4j
@Component
public class ActuatorLogger {

  public ActuatorLogger(@Autowired PathMappedEndpoints pme) {
    log.info("Actuator base path: {}", pme.getBasePath());
    pme.getAllPaths().forEach(p -> log.info("Path: {}", p));
  }
}

org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest可用于帮助您在需要通过代码执行时为执行器端点设置弹簧安全性规则。例如,在您的WebSecurityConfigurerAdapter实现中,此片段可以合并到您现有的规则中:

http.authorizeRequests()
      .requestMatchers(EndpointRequest.to(ShutdownEndpoint.class))
      .hasAnyAuthority("ROLE_ADMIN", "ROLE_SUPPORT")

答案 2 :(得分:1)

@Autowired
private HealthEndpoint healthEndpoint;

public Health getAlive() {
    return healthEndpoint.health();
}