actuator是spring boot中非常重要的一大功能,主要用于在项目运行时,查看运行中的各种配置及参数等

pom.xml


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

查看端点

在pom.xml中添加了以上配置之后,启动时控制台会打印如下信息,mapped后面的路径就是各个信息的查看端点

springboot 怎么禁止其他模块的kafka springboot禁用actuator端点安全性_actuator

其中有一个端点/health,访问http://localhost:8080/health

springboot 怎么禁止其他模块的kafka springboot禁用actuator端点安全性_configprops_02


如图,这是健康检查,UP表示当前服务器正在运行中。那么问题来了,如果服务器关闭,这里是不是应该显示down?你可以试一试

敏感配置

/health是非敏感端点,也就是没有什么机密信息,可以直接访问。其他大部分端点在spring boot早期版本中默认也是可以直接访问的,但现在出于安全考虑,默认大多数端点都是敏感端点,需要有权限才能访问。在properties中可以将其配置为非敏感,就是可以直接访问,以/beans 为例

#设置所有端点不敏感
endpoints.sensitive=false
#设置单个端点(/beans)不敏感
endpoints.beans.sensitive=false

以上两个配置只需要一个就可以开启查看http://localhost:8080/beans   

部分端点介绍

/autoconfig:自动配置,显示 哪些自动配置生效,哪些没生效,以及生效的条件是什么
/configprops:参数配置,显示当前环境下,spring boot可配置的properties参数有哪些
/beans:注入的Bean,显示当前spring boot中注入了哪些bean

注意:以上三个是理解和学习spring boot非常重要的端点,下面会进一步介绍这三个

/dump:活动线程

/env:环境属性

/health:健康检查

/info:定制信息

/mappings:URI路径,在这里可以看到有哪些端点

/metrics:查看内存、CPU核心等系统参数

/trace:用户请求信息

/loggers:日志

/env/{name:.*}:像这种端点,后面带有一个name,这是指获取env中名字为name的那一个参数的值,比如http://localhost:8080/env/local.server.port

springboot 怎么禁止其他模块的kafka springboot禁用actuator端点安全性_actuator_03

Chrome插件

先说明一下,上图中我用的是Chrome浏览器,安装了JSONView插件,查看json时会自动格式化,可以看的更清楚,而且可以收起。另外我还装了tabbed postman-rest client插件,用于模拟post请求,因为有些端口安全级别高,只允许POST请求,后面会讲。怎么安装Chrome插件这里不讨论,网上找很简单。

/autoconfig

查看自动配置,在当前程序中某些自动配置生效以及不生效的原因


springboot 怎么禁止其他模块的kafka springboot禁用actuator端点安全性_actuator_04

这个图是利用JSONView插件将json数据全部收起到最高级别

positiveMatches:是当前自动配置生效的bean

negativeMatches:是当前自动配置规则不符,没有配置的bean

springboot 怎么禁止其他模块的kafka springboot禁用actuator端点安全性_autoconfig_05

展开positiveMatches有上面这一段,这就是默认tomcat连接池的自动配置原因,详细意思如果你不懂,我在这里简单几句话也讲不清楚。不过我在12篇有对这个自动配置的详细讲解,只要你看懂了第12篇,再对照着看这里,自然就会明白。只要你能看懂positiveMatches,自然就能看懂negativeMatches


/beans

查看当前注入到spring的所有bean。可以在其中找到当前的数据源bean是tomcat jdbc

springboot 怎么禁止其他模块的kafka springboot禁用actuator端点安全性_actuator_06


bean:注入spring的bean的id名,有些名字是系统特定的,dataSource就是默认的数据源id

aliases:bean的别名,没配置过这个的可以忽视

scope:单例或多例,spring的bean默认是单例

type:bean的类型

resource:这里的Tomcat.class是这个bean的配置源类,详细意思我在第 12篇讲过

dependencies:依赖的bean,在自动配置的时候必须先生成dependencies的dean,才能生成当前bean

/configprops

springboot 怎么禁止其他模块的kafka springboot禁用actuator端点安全性_actuator_07

prefix:properties参数的前缀 

properties:参数值

比如图中倒数第二个参数maxIdle,在properties中的配置方式就是

spring.datasource.tomcat.maxIdle = xxx

/shutdown关闭应用

/shutdown是一个特殊端点,请求这个端点可以直接关闭运行中的应用程序。我们在eclipse中也可以启动和关闭spring boot,但那属于强杀,会将没执行完的线程直接杀死,就像按电源直接关机一样,可能会造成一些问题。而/shutdown就相当于点击左下角的关机按钮,属于优雅的关机。

要启用/shutdown端点,除了前面的敏感参数,还要单独配置开启它

endpoints.shutdown.enabled=true

此外,这个端点只能用post请求,也就是在浏览器中请求是无效的

springboot 怎么禁止其他模块的kafka springboot禁用actuator端点安全性_autoconfig_08

这是我前面说的tabbed postman-rest client插件,这样就把spring boot程序优雅的关闭了

访问权限 

如果要保证这几个端点的安全,可以使用过滤器对这些端点进行权限控制。注意拦截器对这些端点无效,具体原因我在18篇和19篇讲过。