【问题标题】:Check domain or IP that request came from? [duplicate]检查请求来自的域或 IP? [复制]
【发布时间】:2012-07-14 02:52:43
【问题描述】:

我有一个 servlet,是否可以检查请求是否来自特定域,例如“example.com”?

public abstract class MyServlet extends HttpServlet {

public void doPost(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException 
{
        if (didOriginateFrom("example.com", req)) {
            // ok to process
        }
    }
}

我有一台服务器会将一些工作卸载到辅助服务器(上图),只是想确保它只处理来自我的主服务器的请求,

谢谢

【问题讨论】:

    标签: servlets


    【解决方案1】:

    以下方法为您提供发出请求的客户端主机的信息。

    • HttpServletRequest.getRemoteAddr()
    • HttpServletRequest.getRemoteHost()

    这是您要查找的代码:

    boolean didOriginateFrom(Sting host, HttpServletRequest req) {
       return req.getRemoteHost().contains(host);
    } 
    

    上述两种方法都提供有关客户端或发送请求的最后一个代理地址的信息。

    一些服务器可能会返回原始客户端地址,尽管请求已通过多个代理。代理通过添加X-Forwarded-For 标头将直接客户端的地址发送到服务器。因此,一些服务器可能会处理X-Forwarded-For 标头值并返回原始客户端地址。

    这是X-Forwarded-For 请求标头的外观

    X-Forwarded-For : originalclient, proxy1, proxy2, lastproxy
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,javax.servlet.ServletRequest.getServerName() 应该可以工作。它还提供了进一步的方法来检索请求信息,getScheme()、getServerPort()...

      【讨论】:

      • 问题是关于知道发出请求的客户端地址而不是服务器地址。
      猜你喜欢
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 2014-08-26
      • 2017-07-29
      • 1970-01-01
      • 2012-08-06
      • 2012-06-06
      相关资源
      最近更新 更多