Nexus自定义健康检查地址

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

具体为:
1、工程目录\components\nexus-base\src\main\java\org\sonatype\nexus\internal\metrics

2、工程目录\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() {
    }

    @Override
    protected 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 HealthCheckMetricsModule
    extends AbstractModule
{
  private static final Logger log = LoggerFactory.getLogger(HealthCheckMetricsModule.class);

  protected static final String MOUNT_POINT = "/v1/api/healthCheck";

  @Override
  protected void configure() {
    // NOTE: AdminServletModule (metrics-guice integration) generates invalid links, so wire up servlets ourselves

    final 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)
    {
      @Override
      protected void bindSecurityFilter() {
        filter(MOUNT_POINT + "/*").through(SecurityFilter.class);
      }
    });

    // require permission to use endpoints
    install(new FilterChainModule()
    {
      @Override
      protected 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 HealthCheckMetricsServletModule
    extends ServletModule
{
  private final String mountPoint;

  protected HealthCheckMetricsServletModule(final String mountPoint) {
    this.mountPoint = mountPoint;
  }

  @Override
  protected void configureServlets() {
    bind(HealCheckCustomer.class);

    serve(mountPoint + "/life").with(new HealCheckCustomer());

    // record metrics for all webapp access
    filter("/*").through(new InstrumentedFilter());

    bind(SecurityFilter.class);

    // configure security
    bindSecurityFilter();
  }

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

访问效果如下:

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Nexus Repository OSS 3 是Sonatype公司开发的一款免费开源的软件仓库管理工具,用于存储、管理和分发软件包。你可以在Sonatype官方网站上找到Nexus Repository OSS 3的下载地址。 要下载Nexus Repository OSS 3,首先打开Sonatype的官方网站。在网站的顶部菜单栏中,你可以找到一个名为“Products”的选项,鼠标悬停在上面后会展开一个下拉菜单。在下拉菜单中,你会看到一个名为“Nexus Repository OSS”的选项,点击它进入Nexus Repository OSS的官方页面。 在Nexus Repository OSS的官方页面中,你会看到一些关于Nexus Repository OSS的介绍和功能特点。页面中间部分有一个黑色的背景区域,名为“Download”,提示你可以在这里下载Nexus Repository OSS 3。在“Download”区域下方有一个绿色的按钮,上面写着“Get Nexus Repository OSS”,点击这个按钮进行下载。 点击后,你会被重定向到Nexus Repository OSS的下载页面。在下载页面,你将会看到一些下载选项,如操作系统的不同版本和安装包的格式。根据你的需求,选择适合自己操作系统版本的下载选项。例如,如果你的操作系统是Windows,那么你可以选择一个Windows Installer的下载选项。 选择完下载选项后,点击相应的链接,开始下载Nexus Repository OSS 3的安装包。下载完成后,你就可以进行Nexus Repository OSS的安装了。 总结起来,要下载Nexus Repository OSS 3,你需要依次打开Sonatype官方网站的“Products”选项,选择“Nexus Repository OSS”,然后进入官方页面,点击“Get Nexus Repository OSS”按钮,根据自己的需求选择下载选项,最后点击相应的链接进行下载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值