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

com.github.dadiyang.autologging.aop.util.RequestUtils Maven / Gradle / Ivy

package com.github.dadiyang.autologging.aop.util;

import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.security.Principal;

/**
 * 请求处理工具类
 *
 * @author dadiyang
 * @since 2019/3/1
 */
public class RequestUtils {
    private static final String X_FORWARDED_FOR = "X-forwarded-for";
    private static final String PROXY_CLIENT_IP = "Proxy-Client-IP";
    private static final String WL_PROXY_CLIENT_IP = "WL-Proxy-Client-IP";
    private static final String HTTP_CLIENT_IP = "HTTP_CLIENT_IP";
    private static final String UNKNOWN = "unknown";
    private static final String HTTP_X_FORWARDED_FOR = "HTTP_X_FORWARDED_FOR";
    private static final String COMMA = ",";

    /**
     * 从 request 中获取请求来源真实地址
     *
     * @param request 当前请求
     * @return 真实来源地址
     */
    public static String getIpAddress(HttpServletRequest request) {
        if (request == null) {
            return "";
        }
        String ip = request.getHeader(X_FORWARDED_FOR);
        if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
            ip = request.getHeader(PROXY_CLIENT_IP);
        }
        if (ip == null || ip.isEmpty() || RequestUtils.UNKNOWN.equalsIgnoreCase(ip)) {
            ip = request.getHeader(WL_PROXY_CLIENT_IP);
        }
        if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
            ip = request.getHeader(HTTP_CLIENT_IP);
        }
        if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
            ip = request.getHeader(HTTP_X_FORWARDED_FOR);
        }
        if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        if (ip != null && ip.contains(COMMA)) {
            // 对于通过多个代理的情况,取第一个非 unknown 的有效IP字符串
            String[] ips = ip.split(COMMA);
            for (String s : ips) {
                if (!UNKNOWN.equalsIgnoreCase(s)) {
                    ip = s;
                    break;
                }
            }
        }
        return ip;
    }

    /**
     * 获取完整的请求路径, 包含 queryString
     *
     * @param request 当前请求
     * @return 完整的请求路径
     */
    public static String getFullRequestUrl(HttpServletRequest request) {
        if (request == null) {
            return "";
        }
        if (StringUtils.isBlank(request.getQueryString())) {
            return request.getRequestURL().toString();
        }
        return request.getRequestURL().append('?').append(request.getQueryString()).toString();
    }

    /**
     * 获取完整的请求路径, 包含 queryString
     *
     * @param requestUrl  请求url
     * @param queryString 请求参数
     * @return 完整请求路径
     */
    public static String getFullRequestUrl(String requestUrl, String queryString) {
        if (StringUtils.isBlank(queryString) && StringUtils.isBlank(requestUrl)) {
            return "";
        }
        if (StringUtils.isBlank(queryString)) {
            return requestUrl;
        }
        return requestUrl + "?" + queryString;
    }


    /**
     * 从 request 中获取当前用户凭证
     *
     * @param request 当前请求
     * @return 用户凭证
     */
    public static String getUserPrincipal(HttpServletRequest request) {
        if (request == null) {
            return "";
        }
        Principal principal = request.getUserPrincipal();
        if (principal != null && StringUtils.isNotBlank(principal.getName())) {
            return principal.getName();
        }
        return "";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy