Bhu*_*han 43 java ip servlets web-applications
我正在使用JSP,Servlets(Container:Glassfish)开发一个Web应用程序,我需要在其中获取客户端IP Address.
我正在获取客户端的IP地址,因为我只想在有办公室的计算机上访问某些页面(如客户维护表单),我想限制访问办公室以外的那些页面.
以下是我的代码到目前为止:
String ipAddress = request.getRemoteAddr();
System.out.println("IP Address: "+ipAddress);
Run Code Online (Sandbox Code Playgroud)
String ipAddress=null;
String getWay = request.getHeader("VIA"); // Gateway
ipAddress = request.getHeader("X-FORWARDED-FOR"); // proxy
if(ipAddress==null)
{
ipAddress = request.getRemoteAddr();
}
System.out.println("IP Address: "+ipAddress);
Run Code Online (Sandbox Code Playgroud)
different IP Address每次重新启动计算机时,上面的代码都会给我(关机 - >启动或重启).
我变得IP6喜欢:
fe80:0:0:0:20ca:1776:f5ff:ff15%13
Run Code Online (Sandbox Code Playgroud)
让我知道这段代码有什么问题?
Xav*_*tte 69
正如@martin和这个答案解释的那样,它很复杂.获取客户端的IP地址没有防弹方法.
你能做的最好的事情就是尝试解析"X-Forwarded-For"和依赖request.getRemoteAddr();
public static String getClientIpAddress(HttpServletRequest request) {
String xForwardedForHeader = request.getHeader("X-Forwarded-For");
if (xForwardedForHeader == null) {
return request.getRemoteAddr();
} else {
// As of https://en.wikipedia.org/wiki/X-Forwarded-For
// The general format of the field is: X-Forwarded-For: client, proxy1, proxy2 ...
// we only want the client
return new StringTokenizer(xForwardedForHeader, ",").nextToken().trim();
}
}
Run Code Online (Sandbox Code Playgroud)
bas*_*ero 32
我使用以下静态帮助器方法来检索客户端的IP:
public static String getClientIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("HTTP_X_FORWARDED");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("HTTP_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("HTTP_FORWARDED");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("HTTP_VIA");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("REMOTE_ADDR");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getRemoteAddr();
}
return ip;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
我喜欢这个,你可以尝试一下
public String 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)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146385 次 |
| 最近记录: |