SpringMVC
- 首先要在 web.xml中配置监听
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
- 在Service层可以直接注入
@Autowired
private HttpServletRequest request;
- 普通类中也可以这样获取request对象
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Webservice
参考(感谢): https://www.cnblogs.com/longshiyVip/p/4985276.html
我这边重新整理一下
- 配置注入方式
@Resource
private WebServiceContext webServiceContext;
//获取request对象
MessageContext mc = webServiceContext.getMessageContext();
HttpServletRequest request = (HttpServletRequest) (mc.get(MessageContext.SERVLET_REQUEST));
- 通过new WebServiceContextImpl() 获取WebService上下文
WebServiceContext context = new WebServiceContextImpl();
MessageContext ctx = context.getMessageContext();
HttpServletRequest request = (HttpServletRequest) ctx.get(AbstractHTTPDestination.HTTP_REQUEST);
- 这种方式获取可能靠谱一点(如果其他方式获取的context为null,使用这种方式应该可以获取到)
Message message = PhaseInterceptorChain.getCurrentMessage();
HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
这里我也附带一个获取客户端IP的方法,项目一直在用
/**
* 获得访问客户端的ip地址,这里对null和0:0:0:0:0:0:0:1做了处理
* @return ip地址
*/
public static String getRemoteIp(HttpServletRequest request){
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
ip = request.getRemoteAddr();
}
if(ip == null){
ip = "0.0.0.0";
}
return "0:0:0:0:0:0:0:1".equals(ip)?"127.0.0.1":ip;
}