Spring Boot启动后如何获取所有端点列表

问题描述 投票:0回答:5

我有一个用 Spring Boot 编写的休息服务。我想在启动后获取所有端点。我怎样才能做到这一点? 为此,我想在启动后将所有端点保存到数据库(如果它们尚不存在)并使用它们进行授权。这些条目将被注入到角色中,角色将用于创建代币。

java rest spring-boot authorization
5个回答
69
投票

您可以在应用程序上下文启动时获取RequestMappingHandlerMapping。

@Component
public class EndpointsListener implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        ApplicationContext applicationContext = event.getApplicationContext();
        applicationContext.getBean(RequestMappingHandlerMapping.class).getHandlerMethods()
             .forEach(/*Write your code here */);
    }
}

或者,您也可以使用 Spring boot 执行器(即使您不使用 Spring boot,也可以使用执行器),它公开另一个端点(映射端点),其中列出了 json 中的所有端点。您可以点击此端点并解析 json 以获取端点列表。

https://docs.spring.io/spring-boot/docs/current/reference/html/product-ready-endpoints.html#product-ready-endpoints


38
投票

您需要 3 个步骤来公开所有端点:

  1. 启用 Spring Boot 执行器
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 启用端点

在 Spring Boot 2 中,Actuator 禁用了大多数端点,默认情况下唯一可用的两个端点是:

/health
/info

如果要启用所有端点,只需设置:

management.endpoints.web.exposure.include=*

更多详情请参考:

https://docs.spring.io/spring-boot/docs/current/reference/html/product-ready-endpoints.html

  1. 走吧!

http://主机/执行器/映射

顺便说一句,在 Spring Boot 2 中,Actuator 通过将其与应用程序模型合并来简化其安全模型。

更多详情请参考这篇文章:

https://www.baeldung.com/spring-boot-actuators


18
投票

Spring 4.2 起,您可以使用

@EventListener
注释,如下所示:

@Component
public class EndpointsListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(EndpointsListener.class);

    @EventListener
    public void handleContextRefresh(ContextRefreshedEvent event) {
        ApplicationContext applicationContext = event.getApplicationContext();
        applicationContext.getBean(RequestMappingHandlerMapping.class)
            .getHandlerMethods().forEach((key, value) -> LOGGER.info("{} {}", key, value));
    }
}

如果您想了解更多有关如何使用 Spring Events 和创建自定义事件的信息,请查看这篇文章:Spring Events


9
投票

在application.properties中,我们需要 management.endpoints.web.exposure.include=映射

然后我们可以看到所有端点: http://localhost:8080/actuator/mappings

不要忘记将执行器添加到 POM。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

5
投票

聚会迟到但你可以直接使用

@Autowired
private RequestMappingHandlerMapping requestHandlerMapping;

this.requestHandlerMapping.getHandlerMethods()
            .forEach((key, value) ->  /* whatever */));
© www.soinside.com 2019 - 2024. All rights reserved.