Java 中的 isLocalHost(String hostNameOrIpAddress)

the*_*sch 0 java

我想为 Jersey Web 应用程序编写一个过滤ContainerRequestFilter器,以过滤掉所有远程调用。
因此,只允许来自同一台计算机(运行 webapp 的计算机)的请求。

我得到一个类型的上下文对象ContainerRequestContext,我通过ctx.getUriInfo().getRequestUri().getHost().

如何检查该主机名(IPv4、IPv6 或域名形式)是否是本地计算机的地址?

Z4-*_*Z4- 5

一旦您从请求中删除主机名,我就会采用类似的方法。localhost它也应该适用于类似的输入。

public boolean isLocalAddress(String domain) {
    try {
        InetAddress address = InetAddress.getByName(domain);
        return address.isAnyLocalAddress()
                || address.isLoopbackAddress()
                || NetworkInterface.getByInetAddress(address) != null;
    } catch (UnknownHostException | SocketException e) {
        // ignore
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

但请记住,由于确定请求是否来自本地客户端并不简单,而且还会影响性能,我建议仅将容器的侦听地址绑定到本地可访问的接口(127.0.0.1、 ::1),或实施某种身份验证。这种方法 - 您试图从请求中确定此信息也是不安全的。