在service如何获取HttpServletRequest
参考:https://blog.csdn.net/javacrazy_/article/details/116588422
自定义封装HttpContextUtils
可以通过RequestContextHolder.getRequestAttributes()强制转化ServletRequestAttributes获取getRequest()得到,HttpServletRequest对象
/**
* Http工具类
*/
public class HttpContextUtils {
public static HttpServletRequest getHttpServletRequest() {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if(requestAttributes == null){
return null;
}
return ((ServletRequestAttributes) requestAttributes).getRequest();
}
public static Map<String, String> getParameterMap(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);
if (StringUtils.isNotBlank(value)) {
params.put(parameter, value);
}
}
return params;
}
public static String getLanguage() {
//默认语言
String defaultLanguage = "zh-CN";
//request
HttpServletRequest request = getHttpServletRequest();
if(request == null){
return defaultLanguage;
}
//请求语言
defaultLanguage = request.getHeader(HttpHeaders.ACCEPT_LANGUAGE);
return defaultLanguage;
}
}
```
# HttpServletRequest与ServletServerHttpRequest区别
HttpServletRequest 是tomcat提供的。
ServerHttpRequest 是 spring框架提供的。
ServletServerHttpRequest 将 HttpServletRequest 作为自己的一个成员属性。
# 获取ip
```java
/**
* IP工具类
*/
public class IpUtils {
private static Logger logger = LoggerFactory.getLogger(IpUtils.class);
public static String getIpAddr(HttpServletRequest request) {
String ip = null;
try {
ip = request.getHeader("x-forwarded-for");
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
} catch (Exception e) {
logger.error("IpUtils ERROR ", e);
}
return ip;
}
}
```