網上找了很多文章,各種照搬,只能自己實現
基於開源項目HTTP-Proxy-Servlet實現
開源項目地址:https://github.com/mitre/HTTP-Proxy-Servlet
1. 添加依賴
<dependency> <groupId>org.mitre.dsmiley.httpproxy</groupId> <artifactId>smiley-http-proxy-servlet</artifactId> <version>1.11</version> </dependency>
2. 實現自己的ProxyServlet,重寫service方法,官方通過配置servlet參數只能代理一個目標地址,通過自己拓展service方法,進行邏輯判斷可以動態代理到不同的目標地址,參考代碼如下:
@Override protected void service(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException { String targetUri = "http://www.baidu.com/"; servletRequest.setAttribute(ATTR_TARGET_URI, null); super.targetUri = targetUri; URI uri = null; try { uri = new URI(targetUri); } catch (URISyntaxException e) { log.error("創建URI對象出錯, targetUri[{}]", targetUri, e); } servletRequest.setAttribute(ATTR_TARGET_HOST, null); super.targetHost = URIUtils.extractHost(uri); super.service(servletRequest, servletResponse); }
3. springboot中注冊servlet,參考代碼如下:
@Configuration public class ProxyServletConfiguration { @Bean public ServletRegistrationBean<DiskProxyServlet> servletServletRegistrationBean() { ServletRegistrationBean<DiskProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>(new DiskProxyServlet(), "/toProxy"); servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "true"); return servletRegistrationBean; } }
4. 瀏覽器訪問http://ip:port/toProxy,會代理到百度首頁;