2012-09-19 12 views
5

私はTomcat内でJavaサーブレットアプリケーションを実行しています。セキュリティ上の理由から、マシン自体(またはおそらく私自身のPCも)だから私はHttpServletRequestを私が受け取ることなく、リモートアドレスを確認し、これを施行するそれは常に要求がリモートマシンからアクセスするときにrequest.getRemoteAddr()。equals( "127.0.0.1")となるのはなぜですか?

はなぜ、この、私はそれを修正したり、そこにあることができているローカルホストから来ていなくても、127.0.0.1を返します。私の管理コマンドをサーバーからのみ実行する別の方法です。

+0

コードの一部を貼り付けて、このチェックをどこで実行しようとしているか説明してください。 – Scis

+2

リクエストを転送するマシン(たとえば、nginx)上のTomcatの前に何かがありますか? 'X-Forwarded-For'ヘッダーを見てみましょう。 –

+0

@Jonas Adler、ありがとう、私はhomepcとは違ってサーバーから走ったときにx-forwarded-forの値が異なっています(私の家のPCから走ったときの値は私の家のIPアドレスと一致しません)ので、代わりにx-forwarded-forの値をチェックし、サーバーマシンへのアクセスを制限してください。 –

答えて

3

まず、リクエストに 'X-Forwarded-For'ヘッダーがあるかどうかを確認します。ヘッダーが設定されている場合、その中の最初のIPが探しているIPである必要があります。ヘッダーが空の場合request.getRemoteAddr()は正しいIPを返す必要があります。 「X-転送さ-のために」の

ウィキ:フォワーディングインスタンスは「X-転送さ-用に設定することを余儀なくされていないので、あなたは、このように正しいIPを取得していることは100%を確認することはできませんhttp://en.wikipedia.org/wiki/X-Forwarded-For

注意'ヘッダー。

関連する問題