SpringMVC中静态获取request对象 Spring中获取 HttpServletRequest对象 SpringBoot中静态获取request
一、web.xml 中配置Listener
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
二、代码实现
1、创建RequestUtil 静态获取request、response对象
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.request.ServletWebRequest;
/**
* description: 静态获取request、response对象
* @version v1.0
* @author w
* @date 2020年6月23日下午3:23:58
**/
public class RequestUtil {
/**
* description: 静态获取request对象
* @return HttpServletRequest
* @version v1.0
* @author w
* @date 2020年6月23日 下午3:39:43
*/
public static HttpServletRequest getRequest() {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
return request ;
}
/**
* description: 静态获取response 对象
* @return HttpServletResponse
* @version v1.0
* @author w
* @date 2020年6月23日 下午3:40:02
*/
public static HttpServletResponse getResponse() {
ServletWebRequest servletWebRequest = (ServletWebRequest)RequestContextHolder.getRequestAttributes();
HttpServletResponse response = servletWebRequest.getResponse();
return response;
}
}
2、Spring Boot 中静态获取 response 如下:
public static HttpServletResponse getResponse() {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletResponse response = servletRequestAttributes.getResponse();
log.debug("get response success ... ");
return response;
}
(2021年4月19日20:57:23 增加)
3、常用方法:
/**
* Description: 获取 request 请求 header
* @param request
* @return java.util.Map<java.lang.String,java.lang.String>
* @version v1.0
* @author wu
* @date 2023/5/8 9:25
*/
public static Map<String,String> getRequestHeader(HttpServletRequest request){
final Map<String, String> map = new HashMap<>();
final Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()){
final String headerName = headerNames.nextElement();
final String header = request.getHeader(headerName);
map.put(headerName,header);
}
return map;
}
/**
* Description: 获取 response 响应 header
* @param response
* @return java.util.Map<java.lang.String,java.lang.String>
* @version v1.0
* @author wu
* @date 2023/5/8 9:26
*/
public static Map<String,String> getResponseHeader(HttpServletResponse response){
final Map<String, String> map = new HashMap<>();
final Collection<String> headerNames = response.getHeaderNames();
headerNames.stream().forEach(e->{
final String val = response.getHeader(e);
map.put(e,val);
});
return map;
}
/**
* Description: 获取 文件上传 Part 信息
* @param request
* @return java.util.List<java.util.Map<java.lang.String,java.lang.String>>
* @version v1.0
* @author wu
* @date 2023/5/8 9:26
*/
public static List<Map<String,String>> getPartInfoList(HttpServletRequest request) throws ServletException, IOException {
final String contentType = request.getContentType();
if(Objects.nonNull(contentType) && contentType.startsWith(MediaType.MULTIPART_FORM_DATA_VALUE)){
List<Map<String,String>> list = new ArrayList();
request.getParts().stream().forEach(e->{
final HashMap<String, String> map = new HashMap<>();
map.put("fileName",e.getSubmittedFileName());
map.put("fileSzie",String.valueOf(e.getSize()));
map.put("contentType",e.getContentType());
list.add(map);
});
return list;
}
return Collections.emptyList();
}
/**
* Description: 获取真实Ip
* @return java.lang.String
* @version v1.0
* @author wu
* @date 2023/5/8 9:27
*/
public static String getRealIp(HttpServletRequest request){
String remoteAddr = request.getHeader("X-Real-IP");
if (StringUtils.isNotBlank(remoteAddr)) {
remoteAddr = request.getHeader("X-Forwarded-For");
}else if (StringUtils.isNotBlank(remoteAddr)) {
remoteAddr = request.getHeader("Proxy-Client-IP");
}else if (StringUtils.isNotBlank(remoteAddr)) {
remoteAddr = request.getHeader("WL-Proxy-Client-IP");
}
return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
}
( 2023年5月8日 09:44:07 增加 )