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
猜你喜欢
- 在本博客中,可以找到一篇《c#实现输出的字符靠右对齐的示例》它有教大家怎样实现字符串输出进行左齐或者是右对齐。本篇的方法,超简单,是使用st
- 1、获取视频缩略图有两个方法(1)通过内容提供器来获取(2)人为创建缩略图(1)缺点就是必须更新媒体库才能看到最新的视频的缩略图[java]
- 你知道String、StringBuilder、Stringbuffer的区别吗?当你创建字符串的时候,有考虑过该使用哪个吗?别急,这篇文章
- 合成聚合复用原则合成复用原则又称为组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP
- mkdir函数用于创建目录。格式如下:#include<sys/types.h>#include<sys/stat.h&g
- 引言设计: 嗯? 这个图片点击跳转进详情再返回图片怎么变白闪一下呢?产品: 是啊是啊! 一定是个bug开发: 囧囧囧在开发过程中, 也许你也
- 我们都知道,当RecyclerView数据源更新后,还需要通过adapter调用对应的方法,从而让RecyclerView重新绘制页面本次也
- 今天来了一个问题:软键盘无法弹出。分析后是因为系统判断当前有外接硬键盘,就会隐藏软键盘。但实际情况并不是这么简单,该问题只有在特定条件下偶现
- 通用配置#下面介绍的整合JDBC和整合MyBatis都需要添加的实体类和配置数据库表#CREATE TABLE `user` ( `id`
- 十六进制字符串与数值类型之间转换(C# 编程指南) 以下示例演示如何执行下列任务: 获取字符串中每个字符的十六进制值。 获取与十六进制字符串
- 一、项目要求实现一个通讯录通讯录可以用来存储100个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:添加联系人信息删除指定
- 一、百度百科Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防
- 我们知道在编程时许多操作(如更新UI)需要在主线程中完成,而且,耗时操作(如网络连接)需要放在子线程中,否则会引起ANR。所以我们常使用Ha
- 前言空间分配要点有:一是空间分配的连续性;二是动态内存申请;三是防止程序执行中出现异常错误。提示:开始讲解了嗷~后续会根据精力持续更新嗷!!
- 最近的一个接口项目,传的参数要求是json,需要特殊处理一下。重点是这两句话:httpPost.setHeader("Conten
- 安装hbase首先下载hbase的最新稳定版本 http://www.apache.org/dyn/closer.cgi/hbas
- 本文实例为大家分享了java实现简单石头剪刀布游戏的具体代码,供大家参考,具体内容如下问题描述Alice, Bob和Cindy一起玩猜拳的游
- 1.在res上面右键->New->Android resource directory2.点击之后,出现下图Resource t
- 几个月前写过一篇博客《xUtils3.0框架学习笔记》 ,上面也有记录通过xUtils实现文件上传的使用方法,代码如下:private vo
- 第一次进入应用的时候,都会有一个引导页面,引导页面的实现起来也很简单,实现的方式也有很多,下面是自己写的一个引导页面的效果,大致的实现思路为