Nexus自定义健康检查地址

2024-04-23 08:20

本文主要是介绍Nexus自定义健康检查地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目需要对Nexus进行健康检查,甲方自定义了接口返回的数据。基于此,准备在Nexus里面开发一个接口。在本项目中使用的Nexus版本号为3.63.0-01,通过查询资料以及对代码的拜读,明确需要修改nexus-base这个包。需要修改的文件截图如下:

具体为:
1、工程目录\components\nexus-base\src\main\java\org\sonatype\nexus\internal\metrics2、工程目录\Nexus\components\nexus-base\src\main\java\org\sonatype\nexus\internal\web\WebModule.java

HealCheckCustomer.java代码如下: 

package org.sonatype.nexus.internal.metrics;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** @ProjectName: Nexus* @Class: org.sonatype.nexus.internal.metrics.HealCheckCustomer* @Description: java类作用描述* @Author: crue* @CreateDate: 2024/4/22$ 20:35$* @Version: 1.0*/
public class HealCheckCustomer extends HttpServlet {private static final long serialVersionUID = 3972654177231086758L;private static final String CONTENT_TYPE = "text/plain";private static final String CONTENT = "{\"status\": 200, \"message\": \"service is running\"}";private static final String CACHE_CONTROL = "Cache-Control";private static final String NO_CACHE = "must-revalidate,no-cache,no-store";public HealCheckCustomer() {}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setStatus(200);resp.setHeader(CACHE_CONTROL, NO_CACHE);resp.setContentType(CONTENT_TYPE);PrintWriter writer = resp.getWriter();Throwable var4 = null;try {writer.println(CONTENT);} catch (Throwable var13) {var4 = var13;throw var13;} finally {if (writer != null) {if (var4 != null) {try {writer.close();} catch (Throwable var12) {var4.addSuppressed(var12);}} else {writer.close();}}}}
}
HealthCheckMetricsModule.java代码如下:
package org.sonatype.nexus.internal.metrics;import com.codahale.metrics.Clock;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.AbstractModule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonatype.nexus.common.app.FeatureFlag;
import org.sonatype.nexus.security.FilterChainModule;
import org.sonatype.nexus.security.SecurityFilter;
import org.sonatype.nexus.security.anonymous.AnonymousFilter;import javax.inject.Named;import static org.sonatype.nexus.common.app.FeatureFlags.SESSION_ENABLED;@Named
@FeatureFlag(name = SESSION_ENABLED)
public class HealthCheckMetricsModuleextends AbstractModule
{private static final Logger log = LoggerFactory.getLogger(HealthCheckMetricsModule.class);protected static final String MOUNT_POINT = "/v1/api/healthCheck";@Overrideprotected void configure() {// NOTE: AdminServletModule (metrics-guice integration) generates invalid links, so wire up servlets ourselvesfinal Clock clock = Clock.defaultClock();bind(Clock.class).toInstance(clock);final JsonFactory jsonFactory = new JsonFactory(new ObjectMapper());bind(JsonFactory.class).toInstance(jsonFactory);install(new HealthCheckMetricsServletModule(MOUNT_POINT){@Overrideprotected void bindSecurityFilter() {filter(MOUNT_POINT + "/*").through(SecurityFilter.class);}});// require permission to use endpointsinstall(new FilterChainModule(){@Overrideprotected void configure() {addFilterChain(MOUNT_POINT + "/**",AnonymousFilter.NAME);}});log.info("Metrics support configured");}
}

HealthCheckMetricsServletModule.java代码如下: 

package org.sonatype.nexus.internal.metrics;import com.codahale.metrics.servlet.InstrumentedFilter;
import com.google.inject.servlet.ServletModule;
import org.sonatype.nexus.security.SecurityFilter;public abstract class HealthCheckMetricsServletModuleextends ServletModule
{private final String mountPoint;protected HealthCheckMetricsServletModule(final String mountPoint) {this.mountPoint = mountPoint;}@Overrideprotected void configureServlets() {bind(HealCheckCustomer.class);serve(mountPoint + "/life").with(new HealCheckCustomer());// record metrics for all webapp accessfilter("/*").through(new InstrumentedFilter());bind(SecurityFilter.class);// configure securitybindSecurityFilter();}protected abstract void bindSecurityFilter();
}
WebModule中需要增加的代码为  highPriorityBinder.install(new HealthCheckMetricsModule());这句,完整代码如下:
  protected void installMetricsModule(final Binder highPriorityBinder) {highPriorityBinder.install(new MetricsModule());// 自定义highPriorityBinder.install(new HealthCheckMetricsModule());}

利用idea自带的clean、compile以后,直接运行 mvn package -DskipTests即可得到修改后的包。截图如下:

访问效果如下:

这篇关于Nexus自定义健康检查地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/928266

相关文章

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

C/C++通过IP获取局域网网卡MAC地址

《C/C++通过IP获取局域网网卡MAC地址》这篇文章主要为大家详细介绍了C++如何通过Win32API函数SendARP从IP地址获取局域网内网卡的MAC地址,感兴趣的小伙伴可以跟随小编一起学习一下... C/C++通过IP获取局域网网卡MAC地址通过win32 SendARP获取MAC地址代码#i

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06