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

相关文章

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

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

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

webapp地址

F:\LSP\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

一步一步将PlantUML类图导出为自定义格式的XMI文件

一步一步将PlantUML类图导出为自定义格式的XMI文件 说明: 首次发表日期:2024-09-08PlantUML官网: https://plantuml.com/zh/PlantUML命令行文档: https://plantuml.com/zh/command-line#6a26f548831e6a8cPlantUML XMI文档: https://plantuml.com/zh/xmi

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。