我想为 Jersey Web 应用程序编写一个过滤ContainerRequestFilter器,以过滤掉所有远程调用。
因此,只允许来自同一台计算机(运行 webapp 的计算机)的请求。
我得到一个类型的上下文对象ContainerRequestContext,我通过ctx.getUriInfo().getRequestUri().getHost().
如何检查该主机名(IPv4、IPv6 或域名形式)是否是本地计算机的地址?
一旦您从请求中删除主机名,我就会采用类似的方法。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),或实施某种身份验证。这种方法 - 您试图从请求中确定此信息也是不安全的。
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |