5

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

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

谢谢

4

2 回答 2

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
于 2012-07-14T19:02:04.770 回答
0

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

于 2012-07-14T13:54:31.793 回答