81,091
社区成员
发帖
与我相关
我的任务
分享
因为我也遇到了,所以我这里再来解释一下楼主的问题。
他是说它可以从客户端直接通过地址栏访问后端,后端此时通过request.getRemoteAddr()可以获取到客户端的ip地址。(这里暂且不考虑反向代理的情况),
而如果客户端先访问前端,然后前端将请求发送到后端服务器,此时在后端里request.getRemoteAddr()获取到的仍旧是客户端ip,而不是前端的ip。
他这里想区分一下,想获取到前端的ip。
然后解答是说情况二里,你客户端请求前端,你请求的url里就是前端的地址,在后端的request中是可以获取到的,也就是说可以解析出你访问的前端的ip,应该。(不知道加上域名,获取到的应该是前端的域名吧?那ip呢?)
然后我现在有个问题就是,有什么方法可以辨别到底是前端过来的请求还是客户端直接访问后端过来的请求?(别告诉我在前端什么的加参数,知道你的参数我一样可以在地址栏拼;也别说什么只接受post,我写个表单还不随随便便,和地址栏没什么区别)
/**
* 获取ip
**/
public static String getClientIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = ip.indexOf(',');
if (index != -1) {
ip = ip.substring(0, index);
}
}
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.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP");
}
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_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_FORWARDED");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_VIA");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("REMOTE_ADDR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
if (ip.equals("127.0.0.1") || ip.equals("0:0:0:0:0:0:0:1")) {
//根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ip = inet.getHostAddress();
}
}
return ip;
}
其实不太理解你的问题,如果指的是获取请求ip地址这个可以用。。。