package com.qs.cost.common.utils; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; /** * @author YenHex * @since 2022/2/25 */ @Slf4j public class ServletUtil { /** * 获取用户真实IP * * @return */ public static String getIpAddress(HttpServletRequest request) { // 优先取X-Real-IP String ip = request.getHeader("X-Real-IP"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("x-forwarded-for"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); if ("0:0:0:0:0:0:0:1".equals(ip)) { ip = "undefined"; } } if ("unknown".equalsIgnoreCase(ip)) { ip = "undefined"; return ip; } int pos = ip.indexOf(','); if (pos >= 0) { ip = ip.substring(0, pos); } return ip; } /** * 判断本次请求的数据类型是否为json * @param request request * @return true: 是 JSON 数据; false: 非 json 数据 */ public static boolean isJsonRequest(HttpServletRequest request) { if (request.getContentType() != null) { return request.getContentType().equals(MediaType.APPLICATION_JSON_VALUE) || request.getContentType().equals(MediaType.APPLICATION_JSON_UTF8_VALUE); } return false; } /** * 获取query参数 * @param request * @return */ public static Map getParameterMapAll(HttpServletRequest request) { Enumeration parameters = request.getParameterNames(); Map params = new HashMap<>(); while (parameters.hasMoreElements()) { String parameter = parameters.nextElement(); String value = request.getParameter(parameter); params.put(parameter, value); } return params; } /** * 获取请求Body * * @param request * @return */ public static String getBodyString(ServletRequest request) { StringBuilder sb = new StringBuilder(); InputStream inputStream = null; BufferedReader reader = null; try { inputStream = request.getInputStream(); reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); String line = ""; while ((line = reader.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return sb.toString(); } }