可靠地检测本地客户端,服务器端

Detect local clients reliably, server side

我正在 Karaf 中构建 Java 网络服务器。我想知道 http 调用是否来自同一台机器( = 是本地的)。 Http headers 像 RefererHost 到目前为止在这方面帮助我。

策略就是看headers中出现的URL是否读作localhost

这种方法有什么危险?还有更安全的方法吗?

正如 amon 在他的评论中指出的那样,可靠的方法是使用 javax.servlet.http.HttpServletRequest.

import javax.ws.rs.core.Context;
import javax.servlet.http.HttpServletRequest; 

使用上下文注释将 HttpServletRequest 注入您的代码:

@Context private HttpServletRequest req;

然后使用对象从两者之一获取地址:

LOG.info("{}", req.getRemoteHost());
LOG.info("{}", req.getRemoteAddr());

This 回答帮助我了解了细节。