2009-11-19 16 views
8

SeamアクションからクライアントのIPアドレスを記録する必要があります。現在、我々は、コードを使用している:間違ったアドレスを返すHttpServletRequest.getRemoteAddr()

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext(); 
HttpServletRequest request = (HttpServletRequest)context.getRequest(); 

this.remoteAddress = request.getRemoteAddr(); 

をしかし、これは常にではなく、クライアントのIPアドレスでは、当社のネットワークの内部アドレスを返すしているようです。私の研究では、ネットワークでリバースプロキシを使用すると混乱する可能性がありますが、Webサーバーを再構成することで問題を解決できる可能性があります。他の誰かがこの問題を抱えていましたが、どのように解決しましたか?

私たちはJBoss 5.1アプリケーションサーバーとApache Webサーバーを使用しています。ありがとう!

答えて

6

あなたは私がオリジナルのリクエスタとサーバー間の誤動作プロキシが真の値になることができると思いプロキシ「を介して見る」と

request.getHeader("X-FORWARDED-FOR"); 

を使用してX-FORWARDED-FORヘッダから、元の要求元のアドレスを取得することができます失われている。

参考:wikipedia description of X-FORWARDED-FOR

+0

これはHTTPプロキシには役立ちますが、NATファイアウォールではあまり役に立ちません。 – bmargulies

+0

それは良い情報ですが、何がプロキシを誤動作させる可能性がありますか?私の理解は、すべてが正しく設定されていれば、request.getRemoteAddr()はとにかく "x_forwarded_for"ヘッダーを調べる必要があります。正しく設定されていないと、そのヘッダーが存在しないこともあります。 –

3

必要なものはx-forwarded-forのような特殊なヘッダーで元のIPアドレスを、渡すためにあなたのリバースプロキシのためです。サーブレットからこのヘッダーを取得できます。さらに、このIPアドレスを記録するようにログファイルを変更することもできます。例:

関連する問題