如何配置 com.sun.net.httpserver 以删除通配符绑定?

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

我正在使用 com.sun.net.httpserver.HttpServer 在 kubernates 微服务中公开 REST API。到目前为止,它都是通配符绑定。我需要删除通配符绑定才能将其绑定到其本地 IP

我正在使用 com.sun.net.httpserver.HttpServer 在 kubernates 微服务中公开 REST API。到现在为止我一直在用

httpServer = JdkHttpServerFactory.createHttpServer("http://localhost:" + port + "/"", resourceConfig, false); 
httpServer.start();

这样,端口将具有通配符绑定,任何人都可以通过它进行连接。

我现在需要从该端口删除通配符绑定,并将我的代码修改为以下

InetAddress localHost = InetAddress.getLoopbackAddress();
InetSocketAddress sockAddr = new InetSocketAddress(localHost, port);
httpServer = com.sun.net.httpserver.HttpServer.create();
httpServer.bind(sockAddr,5);
httpServer.start();

通过上面的代码,我看到通配符绑定已被删除([::ffff:127.0.0.1]:),但无法从 Pod 内部或外部访问 API。

编辑(也尝试过此代码)

InetSocketAddress sockAddr = new InetSocketAddress(localHost, port);
httpServer = com.sun.net.httpserver.HttpServer.create();
httpServer.bind(sockAddr,5);
httpServer.start();

使用上面的代码netstat显示*绑定但没有看到错误404。相反,curl 命令永远不会出现。

有人可以指出这里的错误吗?

java rest com.sun.net.httpserver
1个回答
0
投票

您必须调用

server.createContext
方法来注册自己的 HTTP 请求处理程序并自行完成 HTTP 请求。

例如:

var server = com.sun.net.httpserver.HttpServer.create();
server.createContext("/", exchange -> {
    try(var os = exchange.getResponseBody())
    {
        var buffer = "hello world".getBytes(StandardCharsets.UTF_8);
        exchange.sendResponseHeaders(200, buffer.length);
        os.write(buffer);
        os.flush();
    }
});

此外,如果您想在任何网络浏览器中请求该服务器,您将必须自己处理响应标头(通过调用

exchange.getResponseHeaders().add("xxx", "xxx")
)并处理预检请求以解决 CORS 策略问题。

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