编程语言
首页 > 编程语言> > 如何使用弹簧启动2以编程方式获取所有执行器端点?

如何使用弹簧启动2以编程方式获取所有执行器端点?

作者:互联网

在弹簧启动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.在新的弹簧版本中是否有替代这个类?

解决方法:

您需要的一切都在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")

标签:java,spring,spring-boot-2,spring-boot-actuator
来源: https://codeday.me/bug/20190701/1346283.html