Spring集成CXF获取HttpServletRequest,HttpServletResponse
最近的项目中,在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的更多相关文章
- Spring集成CXF发布WebService并在客户端调用
Spring集成CXF发布WebService 1.导入jar包 因为官方下载的包里面有其他版本的sprring包,全导入会产生版本冲突,所以去掉spring的部分,然后在项目根目录下新建了一个CXF ...
- spring mvc 中获取HttpServletRequest ,HttpServletResponse
spring中的bean最常用的 singleton 模式 如果要在springmvc Controller 中获取 HttpServletRequest ,HttpServletResponse ...
- 脱离spring集成cxf(基于nutz框架)
什么是webService WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理论资料: http://blog.csdn.net/wooshn/article/details/8 ...
- spring集成cxf实现webservice接口功能
由于cxf的web项目已经集成了Spring,所以cxf的服务类都是在spring的配置文件中完成的.以下是步骤:第一步:建立一个web项目.第二步:准备所有jar包.将cxf_home\lib项目下 ...
- spring几种获取 HttpServletRequest 对象的方式
以下的 request 实例都编号了,一共 4 种 方式 1.@Autowired 方式2.public void Test(HttpServletRequest request1, HttpServ ...
- java之Spring集成CXF简单调用
简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和 X ...
- webServer-----Spring 集成cxf笔录
目前webserver主要有俩中方式:1,传统的webserver标准集成方式-生成WSDL的xml文档. 2, 基于restful风格的webserver java RESTful We ...
- Struts2中获取HttpServletRequest,HttpSession等的几种方式
转自:http://www.kaifajie.cn/struts/8944.html package com.log; import java.io.IOException; import java. ...
- 使用CXF与Spring集成实现RESTFul WebService
以下引用与网络中!!! 一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存 ...
随机推荐
- ajax获取json 格式绑定下拉框
[{"ClassID":"1","ClassName":"C#","CategorysID":&qu ...
- unittest 报告——HTMLTestRunner/BSTestRunner+代码覆盖率
1. HTMLTestRunner.py 代码(python3)如下: python2: https://github.com/tungwaiyip/HTMLTestRunner "&qu ...
- python多环境切换,pyenv的使用
1.安装pyenv:https://github.com/pyenv/pyenv-installer curl -L https://github.com/pyenv/pyenv-installer/ ...
- [c++] C++中public、protected、private的区别
转:https://blog.csdn.net/vanturman/article/details/79393317 第一: private,public,protected的访问范围: privat ...
- Vue.Draggable拖拽效果
1.下载包:npm install vuedraggable 配置:package.json "dependencies": { "vuedraggable": ...
- linux线程池thrmgr源码解析
linux线程池thrmgr源码解析 1 thrmgr线程池的作用 thrmgr线程池的作用是提高程序的并发处理能力,在多CPU的服务器上运行程序,可以并发执行多个任务. 2 ...
- 将本地文件夹同步到github仓库中
参考博客 本地生成rsa密钥 cd ~/.ssh # 查看是否已经生成过密钥 ssh-keygen -t rsa -C "username on github" # -C表示注释 ...
- 安卓 API 19 低版本设置自带的圆圈效果
在 Android API 19 环境下,RadioButton 消除或者自定义自带的圆圈效果的形式来设置: 自定义自身选择图标 android:button="@drawable/sele ...
- npm转成别的下载地址的插件
第一种方式 1. 查看当前计算机的下载地址 npm get registry 2. 修改为淘宝npm镜像 npm config set registry http://registry.npm.tao ...
- centos7.2 安装nginx+php
Nginx的安装 安装快速HTTP服务器“的Nginx”并配置HTTP服务器# install from EPEL [root@linuxprobe~]# yum --enablerepo=epel ...