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