springboot實現反向代理,動態代理目標地址


網上找了很多文章,各種照搬,只能自己實現

基於開源項目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,會代理到百度首頁;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM