检查请求来自哪个域或IP?

时间:2012-07-14 13:47:40

标签: servlets

我有一个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
        }
    }
}

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

由于

2 个答案:

答案 0 :(得分:4)

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

  • 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

答案 1 :(得分:0)

如果我理解正确,javax.servlet.ServletRequest.getServerName()应该有效。它还提供了检索请求信息的其他方法,getScheme(),getServerPort()...