You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Helidon MP中保护/metrics与/health端点的访问?

如何保护Helidon MP的/metrics和/health端点?

当然有办法保护这些端点,下面是两种常用的实现方式:

1. 用户名密码认证保护

你可以借助Helidon的安全扩展,给指定端点添加HTTP Basic认证。

首先确保依赖里包含helidon-microprofile-security,然后在application.yaml里配置安全规则:

security:
  providers:
    - http-basic:
        realm: "helidon-admin"
        users:
          - user: "admin"
            password: "{bcrypt}$2a$10$..." # 生产环境一定要用加密后的密码,比如bcrypt
  rules:
    - paths:
        - "/metrics"
        - "/health"
        - "/metrics/*"
        - "/health/*"
      roles-allowed: ["admin"]

这样访问这两个端点时,就会弹出登录框,只有认证通过的用户才能访问。

2. IP白名单限制

如果想只允许特定IP访问,你可以自定义一个请求过滤器来实现:

@Provider
@Priority(Priorities.AUTHENTICATION)
public class IpWhitelistFilter implements ContainerRequestFilter {
    // 可以从配置文件读取,这里先硬编码示例
    private final Set<String> allowedIps = Set.of("127.0.0.1", "192.168.1.0/24");

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        String clientIp = requestContext.getHeaderString("X-Forwarded-For");
        if (clientIp == null || clientIp.isBlank()) {
            clientIp = requestContext.getUriInfo().getRequestUri().getHost();
        } else {
            // 处理反向代理后的真实IP,取第一个
            clientIp = clientIp.split(",")[0].trim();
        }

        // 检查IP是否在白名单里(网段匹配可以用工具类实现)
        boolean isAllowed = allowedIps.stream()
                .anyMatch(ip -> ip.equals(clientIp) || isInSubnet(clientIp, ip));
        
        if (!isAllowed) {
            requestContext.abortWith(Response.status(Response.Status.FORBIDDEN)
                    .entity("IP地址不允许访问").build());
        }
    }

    // 简单实现网段匹配,生产环境可以用Apache Commons Net等工具
    private boolean isInSubnet(String ip, String subnet) {
        // 此处省略具体CIDR网段解析匹配逻辑
        return false;
    }
}

把这个过滤器注册到应用里,就能拦截非白名单IP的请求。

3. 组合使用

实际场景中可以把两种方式结合起来:先做IP白名单过滤,再验证用户身份,双重保障安全性。

内容的提问来源于stack exchange,提问作者Franck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:01:19