5

サーブレットを使用していますが、リクエストが特定のドメイン (「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
        }
    }
}

一部の作業をセカンダリ サーバー (上記) にオフロードするサーバーが 1 つあります。プライマリ サーバーからの要求のみを処理するようにしたいだけです。

ありがとう

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 に答える