This article mainly introduces the use of HttpRequest in Java to obtain the user's real IP address, using this method can avoid Apache, Squid, Nginx and other reverse proxy software caused by the non-real IP address, the need for friends can refer to the next
In the JSP, the method to obtain the IP address of the client is: Request.getremoteaddr (), which is valid in most cases. However, the real IP address of the client cannot be obtained through the reverse proxy software such as Apache,squid,nginx.
If the reverse proxy software is used, the URL of the http://192.168.1.110:2046/is reverse proxy to http://www.jb51.net/URL, The IP address obtained with the REQUEST.GETREMOTEADDR () method is: 127.0.0.1 or 192.168.1.110, not the real IP of the client.
After the agent, due to the addition of the middle tier between the client and the service, so the server can not directly get the client's IP, the server-side application can not directly forward the requested address to the client. However, the x-forwarded-for information is added to the HTTP header information of the forwarding request. Used to track the original client IP address and the server address of the original client request. When we visit http://www.jb51.net/index.jsp/, it is not that our browser actually accesses the index.jsp file on the server, but instead it is accessed by the proxy server first http://192.168.1.110:2046/ INDEX.JSP, the proxy server will return the results of the access to our browser, because it is the proxy server to access the index.jsp, so index.jsp through The Request.getremoteaddr () method gets the IP address of the proxy server, which is actually the address of the client.
Code:
1 Packagela.fuqian.utils;2 3 Importjavax.servlet.http.HttpServletRequest;4 5 /**6 * Get the tool class for client request IP7 * @authorShangxiaofei8 *9 */Ten Public classIputils { One /** A * Get the client's real IP address from the request object - * @paramRequest Request Object - * @returnIP address of the client the */ - Public StaticString getipaddr (httpservletrequest request) { -String IP = request.getheader ("X-forwarded-for"); - if(IP = =NULL|| Ip.length () = = 0 | | "Unknown". Equalsignorecase (IP)) { +ip = Request.getheader ("Proxy-client-ip"); - } + if(IP = =NULL|| Ip.length () = = 0 | | "Unknown". Equalsignorecase (IP)) { Aip = Request.getheader ("Wl-proxy-client-ip"); at } - if(IP = =NULL|| Ip.length () = = 0 | | "Unknown". Equalsignorecase (IP)) { -ip = Request.getheader ("Http_client_ip"); - } - if(IP = =NULL|| Ip.length () = = 0 | | "Unknown". Equalsignorecase (IP)) { -ip = Request.getheader ("Http_x_forwarded_for"); in } - if(IP = =NULL|| Ip.length () = = 0 | | "Unknown". Equalsignorecase (IP)) { toIP =request.getremoteaddr (); + } - returnIP; the } *}
View Code
Get the real IP address of the client through the HttpServletRequest object