HttpServletRequest.getRemoteAddr()のエージェントコミット

2529 ワード

不正なユーザや悪意のあるユーザのアクセスを防止するなど、来訪者のIPアドレスを取得する必要があるアプリケーションが多い.J 2 EEのSERVLET標準インタフェースjavax.servlet.http.HttpServiceletRequestは、訪問者のIPアドレスを取得するためのgetRemoteAddr()メソッドを提供します.
request.getRemoteAddr()この方法は,ほとんどの場合に得られるIPが有効である.しかし,クライアントではエージェントソフトウェアを介してクライアントの実際のIPアドレスを取得することはできない.エージェント後,クライアントとサービスの間に中間層が追加されたため,サーバはクライアントのIPを直接取得することができず,サーバ側アプリケーションも転送要求のアドレスを直接クライアントに返すことができない.しかし、転送要求のHTTPヘッダ情報には、既存のクライアントIPアドレスと元のクライアント要求のサーバアドレスを追跡するためのX−FORWARDED−FOR情報が追加されている.クライアントの真のIPを取得するにはrequestを判断する必要がある.getHead();
Java取得クライアントのIPコードは次のとおりです.
 1 public String getAddr(HttpServletRequest request){

 2 

 3     String ip=request.getHeader("x-forwarded-for");

 4        if(ip==null || ip.length()==0 || "unknown".equalsIgnoreCase(ip)){

 5          ip=request.getHeader("Proxy-Client-IP");

 6        }

 7         if(ip==null || ip.length()==0 || "unknown".equalsIgnoreCase(ip)){

 8          ip=request.getHeader("WL-Proxy-Client-IP");

 9        }

10        if(ip==null || ip.length()==0 || "unknown".equalsIgnoreCase(ip)){

11          ip=request.getRemoteAddr();

12        }

13 

14      return ip;

15 

16 }