java - 如何配置 com.sun.net.httpserver 仅接受来自本地主机的请求?

标签 java httpserver

我正在使用 com.sun.net.httpserver.HttpServer 来处理一些 http 请求。我的 http 服务器运行在 nginx 后面,它映射服务器域名,并通过将其用作在某个端口运行的代理将请求转发到我的服务器。如果我的 http 服务器访问服务器正在运行的端口,则它们会接受所有请求。我想要一种机制,以便服务器只接受来自应该可用的域的请求,就像我在 nginx 中使用的一样。我想如果我可以强制 http 服务器只能由 localhost 访问,那将会有所帮助。

实现这一目标的最佳方法是什么?

最佳答案

I guess it would help if I could force the http server to be accessable by localhost only.

Java SE HttpServer 实例1 监听其绑定(bind)到2 的 IP 地址上的请求。因此将其绑定(bind)到环回 IP 地址,如下所示:

InetAddress localHost = InetAddress.getLoopbackAddress();
InetSocketAddress sockAddr = new InetSocketAddress(localHost, 80);
HttpServer server = HttpServer.create(sockAddr, 0);

更一般地说,如果您只想接受来自一组给定 IP 地址的请求,一种方法是在处理程序中调用 HttpExchange::getRemoteAddress,并在远程地址不存在时采取适当的操作。你想要什么。但请注意,远程地址将是直接上游 IP 地址。它可能是您的反向代理,也可能是远程用户使用的某些正向代理。

但是,如果您正在寻找可以接受所有请求但仅响应发送到特定域名的请求(按照传统虚拟主机文件)的东西,我认为您将必须自己实现该过滤。 HttpServer 被设计为一个简单的轻量级服务器......而不是一个功能齐全的 Web 容器。


1 - 这只适用于 JDK 提供的 HTTPServer 类。对于其他人,YMMV。
2 - 除非您绑定(bind)到通配符地址...

关于java - 如何配置 com.sun.net.httpserver 仅接受来自本地主机的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50770747/

相关文章:

java - 如何清理 HTML 代码以防止 Java 或 JSP 中的 XSS 攻击?

java - 用于实现循环构造的替代代码库

java - 无响应的 HTTP 处理程序

ssl - 为 IBM Websphere - HTTPServer 安装 SSL 证书

java - 当我从另一个屏幕返回时,上一个屏幕关闭(调用 onDestroy)

java - 有没有办法发送可序列化类的不同子类的实例?

java - 尝试将参数传递给 java 应用程序

node.js - 带有 SSL 的 npm http-server

Java - 通过 HTTP 服务器发送文件

asynchronous - 现实世界中跨平台的分散式异步对等通信