Как открыть порт 8000 для удаленного доступа с помощью класса HttpServer? - PullRequest
0 голосов
/ 05 мая 2020

Я сделал этот крошечный 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");
    }
}

Как я могу это исправить?

1 Ответ

0 голосов
/ 06 мая 2020

Как было предложено в комментариях к вопросу, изменение localhost на 0.0.0.0 разрешенных соединений со всех внешних адресов и обратной петли

...