2 changed files with 80 additions and 0 deletions
@ -0,0 +1,65 @@ |
|||
package com.project.base.domain.utils; |
|||
|
|||
import jakarta.servlet.http.HttpServletRequest; |
|||
import jakarta.servlet.http.HttpServletResponse; |
|||
import org.springframework.web.context.request.RequestContextHolder; |
|||
import org.springframework.web.context.request.ServletRequestAttributes; |
|||
|
|||
/** |
|||
* 客户端请求工具类 (Spring Boot 3 / Jakarta EE 版) |
|||
*/ |
|||
public class ServletUtils { |
|||
|
|||
/** |
|||
* 获取当前请求对象 HttpServletRequest |
|||
*/ |
|||
public static HttpServletRequest getRequest() { |
|||
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); |
|||
return attributes != null ? attributes.getRequest() : null; |
|||
} |
|||
|
|||
/** |
|||
* 获取当前响应对象 HttpServletResponse |
|||
*/ |
|||
public static HttpServletResponse getResponse() { |
|||
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); |
|||
return attributes != null ? attributes.getResponse() : null; |
|||
} |
|||
|
|||
/** |
|||
* 获取请求头信息 |
|||
*/ |
|||
public static String getHeader(String name) { |
|||
HttpServletRequest request = getRequest(); |
|||
return request != null ? request.getHeader(name) : null; |
|||
} |
|||
|
|||
/** |
|||
* 获取客户端真实 IP |
|||
* 考虑了 Nginx/网关 代理的情况 |
|||
*/ |
|||
public static String getClientIp() { |
|||
HttpServletRequest request = getRequest(); |
|||
if (request == null) return "unknown"; |
|||
|
|||
// 处理常用的代理 Header
|
|||
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() || "unknown".equalsIgnoreCase(ip)) { |
|||
ip = request.getHeader("WL-Proxy-Client-IP"); |
|||
} |
|||
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { |
|||
ip = request.getRemoteAddr(); |
|||
} |
|||
|
|||
// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
|
|||
if (ip != null && ip.length() > 15) { |
|||
if (ip.indexOf(",") > 0) { |
|||
ip = ip.substring(0, ip.indexOf(",")); |
|||
} |
|||
} |
|||
return ip; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue