我有一个用spring boot写的休息服务。我希望在启动后获得所有端点。我怎样才能实现这一目标? 我的目的是,我希望在启动后将所有端点保存到数据库(如果它们尚不存在)并使用这些端点进行授权。这些条目将注入角色,角色将用于创建令牌。
答案 0 :(得分:16)
您可以在应用程序上下文的开头获取RequestMappingHandlerMapping。
public class EndpointsListener implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ContextRefreshedEvent) {
ApplicationContext applicationContext = ((ContextRefreshedEvent) event).getApplicationContext();
applicationContext.getBean(RequestMappingHandlerMapping.class).getHandlerMethods().forEach(/*Write your code here */);
}
}
}
或者你也可以使用Spring引导执行器(你也可以使用actutator,即使你没有使用Spring引导),它会暴露另一个端点(映射端点),它列出了json中的所有端点。您可以点击此端点并解析json以获取端点列表。
答案 1 :(得分:6)
在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>
答案 2 :(得分:1)
作为上述注释的补充,从 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
答案 3 :(得分:0)
晚了聚会,但您可以直接使用
@Autowired
private RequestMappingHandlerMapping requestHandlerMapping;
this.requestHandlerMapping.getHandlerMethods()
.forEach((key, value) -> /* whatever */));
答案 4 :(得分:-1)
您需要3个步骤来暴露所有端点:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在Spring Boot 2中,Actuator禁用了大多数端点,默认情况下只有两个可用:
/health
/info
如果要启用所有端点,只需设置:
management.endpoints.web.exposure.include=*
有关更多详细信息,请参阅:
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
btw,在Spring Boot 2中,Actuator通过将其与应用程序1合并来简化其安全模型。
有关更多详细信息,请参阅本文: