如何使用HttpServer类将8000端口暴露给远程访问?

问题描述 投票:0回答:1

我做了这个小小的api,在一个旧系统上提供一些json。我不能给它添加Spring或任何库,我想这将是一个简单的方法。虽然它可以在本地使用 curl localhost:8000/jms/health当我尝试远程连接时,被拒绝。运行 netstat 还我这个。

[userName@machineIp ~]$ sudo netstat -nlpt | grep 8000
tcp        0      0 127.0.0.1:8000              0.0.0.0:*                   LISTEN      25638/java

而这是类。

package somePackage;

import com.sun.net.httpserver.HttpServer;

import org.slf4j.Logger;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.Executors;

public class HealthHttp {

    public static void init(Logger log) throws IOException {
        HttpServer server = HttpServer.create(new InetSocketAddress("localhost", 8000), 0);
        server.createContext("/jms/health", http -> {

            String body = "{\"hello\":\"world\"}"; // any valid json

            byte[] bytes = body.getBytes(StandardCharsets.UTF_8);

            http.getResponseHeaders().set("Content-Type", "application/json; charset=" + StandardCharsets.UTF_8);

            http.sendResponseHeaders(200, bytes.length);
            OutputStream output = http.getResponseBody();
            output.write(bytes);
            output.flush();
            output.close();
        });
        server.setExecutor(Executors.newFixedThreadPool(1));
        server.start();
        log.info("Http health server initialized");
    }
}

我怎么才能解决这个问题?

java httpserver
1个回答
0
投票

正如问题的评论中所建议的那样,改变一下 localhost0.0.0.0 允许从所有外部地址和环回的连接。

© www.soinside.com 2019 - 2024. All rights reserved.