Springboot轻量级的监控组件SpringbootAdmin
作者:程序员拾山 发布时间:2023-08-25 10:08:31
简介
Springboot Admin是一个管理和监控Springboot项目的组件,分为服务端和客户端,两端通过http进行通信。由于其轻量级的特性,所以特别适合中小项目使用。
其效果图如下:
服务端配置
1,引入Springboot admin和Spring Security依赖。
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2,配置相关属性。
server:
port: 8080
servlet:
context-path: /server
spring:
security:
user:
#admin Server端登录时用的账户密码
name: server123
password: 123456
boot:
admin:
instance-auth:
#启用header验证
enabled: true
#Server访问client接口时会使用下面的配置生成authorization
default-user-name: "name_shishan"
default-password: "pwd_shishan"
3,配置@EnableAdminServer注解
@SpringBootApplication
@Configuration
@EnableAdminServer
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
经过以上3步,服务端就可以启动了。
访问 http://localhost:8080/server/,就可以看到以下登录界面。
使用在yml文件中配置的账户密码就可以登录了。
客户端配置
1,在我们要监控的客户端中加入以下依赖。
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.5.1</version>
</dependency>
2,暴露监控接口以及配置Server地址。
客户端在启动后会向配置的Server发起注册申请,此时为了安全性还需要Server端的账户密码进行校验。
spring:
boot:
admin:
client:
#admin注册地址
url: http://localhost:8080/server
#配置admin的账户
username: server123
password: 123456
admin:
header:
auth:
name: "name_shishan"
password: "pwd_shishan"
#暴露出端口
management:
endpoints:
web:
exposure:
include: "*"
3,对暴露的接口进行权限校验。
由于我们将监控接口进行了暴露,所以必须对相关的接口进行权限校验,否则就有可能泄露相关信息。
对接口进行权限过滤有很多种选择,比如设置IP访问的白名单,只允许admin Server所在的服务器访问,也可以配置相关的token等等。
下面我们以一个简单的接口过滤器实现对/actuator/**相关接口的权限校验。
@Component
public class PathFilter implements Filter {
@Value("${admin.header.auth.name}")
private String username;
@Value("${admin.header.auth.password}")
private String password;
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
AntPathMatcher antPathMatcher = new AntPathMatcher();
if (antPathMatcher.match("/actuator/**", request.getServletPath())) {
String authorization = request.getHeader("authorization");
if (StringUtils.hasText(authorization)) {
String token = Base64Utils.encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
if (authorization.equals("Basic " + token)) {
//token匹配才放行
filterChain.doFilter(request, servletResponse);
return;
}
}
response.setContentType("application/json;charset=UTF-8");
response.setStatus(HttpStatus.UNAUTHORIZED.value());
response.getWriter().print("权限不足");
return;
}
//其他接口直接放行
filterChain.doFilter(request, servletResponse);
}
}
在这个filter中,对actuator相关的接口进行了header参数的校验,只有通过校验才可以访问暴露出的actuator接口。
当然,如果我们使用了SpringSecurity或者SaToken这样的第三方权限框架,也可以去重写相关的配置完成权限的判断,原理都是一样的。
下面我们看一下最终的监控效果:
最后
除了通过普通http请求方式获取监控信息以外,Springboot admin还支持通过注册中心的方式获取相关信息,在其官方文档大家也可以看到相关的配置。
官方文档:codecentric.github.io/spring-boot…
来源:https://juejin.cn/post/7190559664420388920


猜你喜欢
- 1、声明一个测试对象import java.time.LocalDate;import java.util.List;import lomb
- 讲解之前需要说明的是旋转屏幕:在系统的自动旋转屏幕开启的情况下,我们旋转屏幕手动设置屏幕:我们自己去调用Activity的 setReque
- 1.前言MyBatis框架大家肯定都用过的,废话我就不再多说了,这篇文章就给大家分享一下有关MyBatis框架底层的执行原理吧(Debug!
- 为什么要使用克隆? 想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要克隆了,Java语言中克隆针对的是类的实例。如何实现对象
- Spire.Cloud.SDK for .NET提供了接口PdfSecurityApi可用于加密、解密PDF文档。本文将通过C#代码演示具体
- 发送者其实比较简单,需要做的就是首先确定往哪里发送,其次怎么让消息发送顺畅。我们就看一下具体的代码吧。首先调用start方法。完成各个类的初
- 前提:当我们使用Winform开发的时候,经常会遇到:System.InvalidOperationException:&ldquo
- 1. Ajax 概述Ajax 的英文全称是 ”Asynchronous JavaScript and XML&l
- 1.Android 连接MySQL数据库public class DBOpenHelper {private static String d
- 目录概览问题一原因解决办法问题二原因解决办法概览在当下几乎所有的公司都采用了前后端分离的开发模式,Swagger作为了在API在线文档工具,
- using System; using System.Drawing; using System.Windows.Forms; using
- 一、Maven生命周期、阶段、目标 &nbs
- 背景公司线上有个tomcat服务,里面合并部署了大概8个微服务,之所以没有像其他微服务那样单独部署,其目的是为了节约服务器资源,况且这8个服
- EF的基本使用 一、EF的创建二、修改数据库一、加数据库字段二、加数据库 表 一、EF的创建第一步: 创建一个类库第二步: 选择类库第三步:
- static void Main(string[] args) &nb
- 1.引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务
- GestureDetectorGestureDetector 是手势识别的组件,可以识别点击、双击、长按事件、拖动、缩放等手势点击事件点击相
- JPA like 模糊查询 语法格式public List<InstitutionInfo> getAllInstitution
- 最大公约数:指两个或多个整数共有约束中最大的一个。最小公倍数:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整
- 概述背景函数式编程的理论基础是阿隆佐·丘奇(Alonzo Church)于 1930 年代提出的 &lambd