今天优锐课小U要带大家了解的是Sring Boot执行器。
如果要增强对端点的控制,包括调整灵敏度和安全性,则应熟悉Spring Boot Actuator及其工具。
Spring Boot Actuator是Spring Boot的子项目。它为你的应用程序提供了现成的几种生产级服务。在Spring
Boot应用程序中配置了Actuator之后,你可以通过调用Spring Boot Actuator公开的不同HTTP端点(例如应用程序运行状况,Bean详细信息,版本详细信息,配置,记录器详细信息等)来交互和监视应用程序。
Spring Boot包含许多内置端点,你还可以添加自己的端点,甚至将现有端点配置为在你选择的任何自定义端点上公开。显然,考虑到存在许多敏感的端点(例如bean,env等),因此无法公开公开所有端点。因此,对于许多需要通过用户名/密码访问的端点,Spring Boot还将敏感默认值设置为true。HTTP(如果未启用网络安全性,则直接禁用)。默认情况下,运行状况和信息不敏感。
如何启用Spring Boot Actuator
这很容易。你只需要在现有的pom.xml文件中包括以下maven依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
不同的执行器端点
一旦以上Maven依赖关系包含在POM文件中,就会公开16个不同的执行器REST端点,例如执行器,Bean,转储,信息,记录器和度量。
如果在此之上使用Spring MVC,则可以使用四个附加端点——docs, heapdump, jolokia, 和logfile。
自定义执行器端点
Spring Boot允许通过使用Spring属性来自定义端点。只需在application.properties中提及要自定义的属性。你可以通过三种方式自定义端点。你可以启用或禁用端点,自定义其敏感度以及其ID。
以下是一个示例,它可以更改指标端点的敏感度和ID,还可以启用关机功能。
endpoints.metrics.id=springmetrics
endpoints.metrics.sensitive=false
endpoints.metrics.enabled=true
除此之外,你还可以全局自定义端点。以下示例将除info之外的所有端点标记为敏感。
endpoints.sensitive=true
endpoints.info.sensitive=false
固定执行器端点
如我们所见,默认情况下,只有两个端点(运行状况和信息)不敏感。但是其他端点(例如记录器和Bean)很敏感,因此需要授权才能访问。 要访问这些敏感端点,你可以禁用敏感度或使用Spring Security对其进行保护。
为了保护执行器端点,请在pom.xml文件中包括以下maven依赖项。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
在Spring Boot中,默认情况下,包括上述依赖项将提供内置的基于表单的身份验证,用户ID为用户,并随机生成一个密码。然后,需要以下条目来为你的敏感端点启用基本安全性。
management.security.enabled=true
security.basic.enabled=true
security.user.name=admin
security.user.password=admin
要访问执行器受限的端点,你必须具有执行者角色。这是默认配置。
除此之外,你还可以通过扩展Spring提供的AuthenticationManagerBuilder类,使用WebSecurityConfigurerAdapter 保护执行器REST端点。这是使用AuthenticationManagerBuilder的完整实现。
创建自定义执行器端点
关于Spring的最好的事情是,它总是鼓励开发人员提出自己的配置和实现——执行器端点也是如此。
要自定义端点并定义自己的端点,只需实现接口 Endpoint并覆盖其方法即可。 就是这样,你已经完成了公开自己的端点的工作。
以下是定义Spring
Actuator中的自定义端点的简单代码段。 可以在/showendpoints访问它。
importorg.springframework.boot.actuate.endpoint.AbstractEndpoint;
importorg.springframework.boot.actuate.endpoint.Endpoint;
importorg.springframework.stereotype.Component;
importjava.util.List;
@Component
public class ListEndPoints extendsAbstractEndpoint<List<Endpoint>>{
privateList<Endpoint>endpoints;
publicListEndPoints(List<Endpoint>endpoints) {
super("showendpoints");
this.endpoints=endpoints;
}
@Override
publicList<Endpoint>invoke() {
return this.endpoints;
}
}
今天的讲解就到这啦,觉得意犹未尽的小伙伴可以加入我们Java学习资料交流qq群:907135806 进行深入探讨;想要更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java学习资料和视频课程的童鞋可以加vx:ddmsiqi 获取哦。
你的Java学习之路 优锐课保驾护航
网友评论