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即可得到修改后的包。截图如下:

访问效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/641333.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024统计建模:大数据与人工智能时代的统计研究

文章目录 题目解读你需要具备的知识点课题推荐视频分析 题目解读 主要做的是“大数据”与“人工智能”。 其中“大数据”所涉及的的第一个就是大量的数据,数据从哪里来?拿到数据后,我们需要做基本的数据分析,如何对大量的数据进…

大型网站系统架构演化实例_6.使用分布式文件系统和分布式数据库系统

1.使用分布式文件系统和分布式数据库系统 任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后,从一台服务器拆分成两台服务器,但是随着网站业务的发展依然不能满足需求,这时需要使用分布式数据库。文件系统也一…

汇编语言——输入八进制数,存入BX中

文章目录 输入5位以内的八进制数,存入BX中输入6位以内的八进制数,存入BX中 输入5位以内的八进制数,存入BX中 bx为16位的寄存器。 5位以内的八进制数最多是15位二进制,bx最高位默认为0,不输出 只输出bx的5位8进制数 …

【Java框架】SpringBoot(一)基本入门

目录 SpringBoot介绍Spring Boot的诞生SpringBoot特点Spring和Spring Boot的关系Spring Boot的优点和缺点Spring Boot优点Spring Boot缺点 快速创建Spring Boot项目 IDEA创建SpringBoot工程1.打开IDEA,选择Spring Initlializr2.选择SpringBoot版本和初始化依赖3.更改…

微服务:Nacos注册中心

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Nacos注册中心 一、服务注册与发现1.启动Nacos…

视频教程下载:ChatGPT驱动的SEO、网络营销、生产力提升

用户遇到的一个常见问题是在ChatGPT对话过程中难以保持清晰的目的和专注。这可能导致互动无效和浪费时间。这门课程将教给各种创意人士——艺术家、制造者、博主、讲师和内容创作者——如何制定理想的提示配方,从而产生更有成效的对话和更高的回报。 这是一门关于如…

计算机网络【CN】Ch4 网络层

总结 一台主机可以有多个IP地址&#xff0c;但是必须属于多个逻辑网络【不同的网络号】。 解决IP地址耗尽&#xff1a; IP地址结构&#xff1a; 划分子网&#xff1a;&#x1d43c;&#x1d443;地址<网络号>,<子网号>,<主机号> CIDR&#xff1a;IP地址{&…

linux 守护进程的实现

文章目录 1. 守护进程及实现步骤2. 使用fork 方式创建守护进程3. 使用daemon 函数创建 1. 守护进程及实现步骤 特点&#xff1a; 长期运行&#xff1a;守护进程是一种生存期很长的一种进程&#xff0c;它们一般在系统启动时开始运行&#xff0c;除非强行终止&#xff0c;否则…

Day 31 贪心算法理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

贪心算法理论基础 ​ 贪心算法的本质&#xff1a;选择每一个阶段的局部最优&#xff0c;从而达到系统的整体最优&#xff1b; ​ 贪心的套路就是没有套路&#xff0c;最好的策略就是举反例&#xff0c;因为大多数时候并不要求严格证明&#xff0c;只需要得到普遍性结论即可&a…

echart-better基于最新的echarts5.5标题旋转功能

使用教程以及相关的echarts-better最新的包在这里&#xff1a;https://edu.csdn.net/course/detail/24569 echarts在侧边竖向展示标题&#xff0c;以及次标题 主标题和次标题进行旋转&#xff0c;适用于移动端或其他场景。

Promise.all 的方法还没执行完就执行了.then

碰见一个问题&#xff0c;接盘了一个有问题的页面修改。 改变日期后 查询很多数据再去重新加载页面上的数据显示相关的组件。 问题就来了。 加载异常捏…… 最后我一通查&#xff1a; 重点来了 是因为这个Promise.all(数组)&#xff0c;里边这个数组的问题。现在是在数据中…

O2O电商接口解决方案||主流电商|跨境电商API接口应用场景及接入

01 涉及主流电商平台API数据采集接口 电商接口&#xff1a;淘宝&#xff0c;天猫&#xff0c;京东&#xff0c;拼多多&#xff0c;1688&#xff0c;抖音&#xff0c;微店&#xff0c;快手 跨境电商&#xff1a;LAZADA&#xff0c;速卖通&#xff0c;亚马逊&#xff0c;阿里巴巴…