反向代理之如何转发webservice请求 发表于 2017-03-04 更新于 2019-06-29 分类于 架构 , 反向代理 添加拦截器拦截所有webservice请求: 12345678<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> 转发请求到对应地址: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970import 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() { }} 打赏 微信支付