All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fengwenyi.javalib.net.RequestUtils Maven / Gradle / Ivy

There is a newer version: 3.0.1
Show newest version
package com.fengwenyi.javalib.net;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.URLDecoder;
import java.net.UnknownHostException;

/**
 * 你可能想从{@link HttpServletRequest}获取一些信息
 * @author Wenyi Feng
 */
public class RequestUtils {

    // 获取客户端IP地址(不被使用,仅做参考)
    private String getRequestIpOnly(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.getHeader("HTTP_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.getRemoteAddr();
        }
        return ip;
    }

    /**
     * 获取客户端IP地址
     * @param request 请求
     * @return ip地址
     * 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
     *
     * @throws UnknownHostException [ellipsis]
     */
    public static String getRequestIp(HttpServletRequest request) throws UnknownHostException {
        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();
            if(ip.equals("127.0.0.1")){
                //根据网卡取本机配置的IP
                InetAddress inetAddress = InetAddress.getLocalHost();

                ip= inetAddress.getHostAddress();
            }
        }
        // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
        if(ip != null && ip.length() > 15){
            if(ip.indexOf(",")>0){
                ip = ip.substring(0,ip.indexOf(","));
            }
        }
        //return ip;
        return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
    }

    /**
     * 如果客户端通过 request 传递数据,那么就可以使用该方法获取数据
     * 这种通常是通过 Post方式
     *
     * 

* 警告:使用该方法获取post的值,{@code HttpServletRequest} 就不可再用,该方法待优化。(2020.5.28) *

* * @param request HttpServletRequest * @return 客户端上传的数据 * @throws IOException 因为是通过IO流读取数据, * 因此很可能读取失败,或者NULL,导致抛出IO异常, */ public static String getPostData(HttpServletRequest request) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream())); String line; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(line); } //return URLDecoder.decode(sb.toString(), Constant.DEFAULT_CHATSET); br.close(); return sb.toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy