最近的项目中,在Spring继承CXF中要用到request来获取IP,所以先要获取到HttpServletRequest对象,具体方法如下:

1、配置文件:

    <jaxrs:server id="aslRest" address="/">
<jaxrs:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
</jaxrs:inInterceptors> <jaxrs:serviceBeans>
<ref bean="umpgServiceInf"/>
</jaxrs:serviceBeans> <jaxrs:providers>
<bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"/>
</jaxrs:providers> </jaxrs:server>

2、代码实现:

 package com.zat.asl.output.service.impl;

 import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.zat.asl.output.service.inf.UmpgServiceInf;
import com.zat.asl.output.service.inf.UmpgServiceProxyInf;
import com.zat.asl.service.AbstractService;
import com.zat.asl.util.AslUtils;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.PhaseInterceptorChain;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Response; @Service("umpgServiceInf")
public class UmpgServiceImpl extends AbstractService implements UmpgServiceInf { Logger logger = Logger.getLogger(UmpgServiceImpl.class);
@Resource(name="umpgServiceProxyInf")
private UmpgServiceProxyInf umpgServiceProxyInf; @Override
public Response gateway(String request) {
String resp = null;
try{
31 Message message = PhaseInterceptorChain.getCurrentMessage();
32 HttpServletRequest httpServletRequest = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
33 String realIp = httpServletRequest.getHeader("X-Real-IP");
35 logger.info("客户端真实IP>>>realIp=" + realIp + ",forwardedFor=" + forwardedFor); String requestWithIp = request;
if (!StringUtils.isEmpty(realIp)) {
JSONObject reqJson = JSONObject.parseObject(request, Feature.OrderedField);
reqJson.put("clientRealIp", realIp);
requestWithIp = JSONObject.toJSONString(reqJson);
logger.info("原始的request=" + request);
logger.info("注入IP的request=" + requestWithIp);
}
resp = umpgServiceProxyInf.gateway(requestWithIp);
}catch(Exception e){
logger.error(e.getMessage(),e);
return getErrorResponse(AslUtils.ASL_RESP_DATA_TYPE_JSON, AslUtils.ASL_RESPCODE_9999);
}
return getSuccessResponse(resp);
}
}

Spring集成CXF获取HttpServletRequest,HttpServletResponse的更多相关文章

  1. Spring集成CXF发布WebService并在客户端调用

    Spring集成CXF发布WebService 1.导入jar包 因为官方下载的包里面有其他版本的sprring包,全导入会产生版本冲突,所以去掉spring的部分,然后在项目根目录下新建了一个CXF ...

  2. spring mvc 中获取HttpServletRequest ,HttpServletResponse

    spring中的bean最常用的 singleton 模式 如果要在springmvc Controller 中获取  HttpServletRequest ,HttpServletResponse ...

  3. 脱离spring集成cxf(基于nutz框架)

    什么是webService WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理论资料: http://blog.csdn.net/wooshn/article/details/8 ...

  4. spring集成cxf实现webservice接口功能

    由于cxf的web项目已经集成了Spring,所以cxf的服务类都是在spring的配置文件中完成的.以下是步骤:第一步:建立一个web项目.第二步:准备所有jar包.将cxf_home\lib项目下 ...

  5. spring几种获取 HttpServletRequest 对象的方式

    以下的 request 实例都编号了,一共 4 种 方式 1.@Autowired 方式2.public void Test(HttpServletRequest request1, HttpServ ...

  6. java之Spring集成CXF简单调用

    简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和 X ...

  7. webServer-----Spring 集成cxf笔录

    目前webserver主要有俩中方式:1,传统的webserver标准集成方式-生成WSDL的xml文档.       2, 基于restful风格的webserver java RESTful We ...

  8. Struts2中获取HttpServletRequest,HttpSession等的几种方式

    转自:http://www.kaifajie.cn/struts/8944.html package com.log; import java.io.IOException; import java. ...

  9. 使用CXF与Spring集成实现RESTFul WebService

    以下引用与网络中!!!     一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存 ...

随机推荐

  1. 使用Task的Wait和Result时注意

    如果计算限制的任务抛出未处理的异常,该异常会被“吞噬”并存储到一个集合中,而线程池线程可以返回到线程池中.调用Wait方法或者Result属性时,这些成员会抛出一个System.AggregateEx ...

  2. 数据库允许空值(null),往往是悲剧的开始(1分钟系列)

    数据库字段允许空值,会遇到一些问题,此处包含的一些知识点,和大家聊一聊. 数据准备: create table user ( id int, name varchar(20), index(id) ) ...

  3. C#工具:ASP.net 调用SQLserver帮助类

    一.正常调用 1.创建DBHelper帮助类 2.复制以下代码到类中 using System; using System.Collections.Generic; using System.Data ...

  4. shell遍历多个文件夹并进行批量修改文件名

    问题:将图片名中的ing_变为0. 当前目录下:$ ls pic,change_name.sh pic/ |__kk1/ |__img_001.jpg |__img_002.jpg |__vv2/ | ...

  5. ESP8266烧录选项中的QIO 和 DIO解释

    https://blog.csdn.net/recclay/article/details/78956580 看到的由烧录引起的QIO和DIO问题探索.. 所以一般选择DIO QIO -> Qu ...

  6. 浮动float和清除clear

    一.浮动(float) float简介 取值:left,right,none,inherit,默认none(不浮动) 可应用与所有元素 没有继承性 不在正常流中,但会影响布局.因为一个元素浮动时,其他 ...

  7. 有效的结构化思维训练,MECE分析法

    MECE原则,表达精准分类与全面性的有效利器 结构化思维的本质就是逻辑,其目的在于对问题的思考更完整.更有条理,它帮助我们一个一个找到线头,理清思路,探求事物之间的相互联系.MECE分析法是一种结构化 ...

  8. sparkOnYarn报错org.apache.hadoop.fs.FSDataInputStream

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInpu ...

  9. 为什么还需要学习TypeScript

    开篇 TypeScript 是由 C#语言的创始人 Anders Hejlsberg 设计的一种编程语言,设计的初衷就是为了帮助 JavaScript 的开发人员能像类似高级语言c#,Java那样编写 ...

  10. Access denied for user 'ODBC'@'localhost' (using password: NO) 的解决方法

    在部署公司的web项目到myeclipse时遇到的一个错误:Access denied for user 'ODBC'@'localhost' (using password: NO),貌似是mysq ...