ITEEDU

编程学习网


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 旧站归档

  • 搜索

反向代理之如何转发webservice请求

发表于 2017-03-04 更新于 2019-06-29 分类于 架构 , 反向代理

添加拦截器拦截所有webservice请求:

1
2
3
4
5
6
7
8
<filter>
<filter-name>WsTransFilter</filter-name>
<filter-class>com.nfbank.rproxy.filter.WsTransFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>WsTransFilter</filter-name>
<url-pattern>/webservice/*</url-pattern>
</filter-mapping>

转发请求到对应地址:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.cxf.helpers.IOUtils;
import org.apache.http.Header;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class WsTransFilter implements Filter {

@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;

try {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("这里是服务的地址");
InputStreamEntity entity = new InputStreamEntity(
request.getInputStream());
httpPost.setEntity(entity);
for (Enumeration<String> e = request.getHeaderNames(); e
.hasMoreElements();) {
String name = e.nextElement().toString();
if ("Content-Length".equals(name)) {
continue;
}
httpPost.setHeader(name, request.getHeader(name));
}
CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
for (Header h : httpResponse.getAllHeaders()) {
response.setHeader(h.getName(), h.getValue());
}
IOUtils.copyAndCloseInput(httpResponse.getEntity().getContent(),
response.getOutputStream());
} catch (Exception e) {
response.setContentType("text/xml;charset=UTF-8");
String result = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+ "<soap:Body><soap:Fault><faultcode>"
+ "9999"
+ "</faultcode>"
+ "<faultstring>"
+ "失败:"
+ e.getMessage()
+ "</faultstring></soap:Fault></soap:Body></soap:Envelope>";
response.getWriter().print(result);
}
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void destroy() {
}
}
证心 微信支付

微信支付

# HttpClient
如何用HttpClient和xml报文调用webservice服务
第9章建立单元测试框架-实用Common Lisp编程笔记

证心

367 日志
45 分类
78 标签
GitHub 微博
京ICP备16069454号 © 2020 证心