You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.7 KiB
123 lines
3.7 KiB
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<String, String> getParameterMapAll(HttpServletRequest request) {
|
|
Enumeration<String> parameters = request.getParameterNames();
|
|
Map<String, String> 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();
|
|
}
|
|
|
|
}
|
|
|