首页 > 技术文章 > SpringBoot实现反向代理

47Gamer 2020-10-21 15:23 原文

第一步:相关依赖

<dependency>
    <groupId>org.mitre.dsmiley.httpproxy</groupId>
    <artifactId>smiley-http-proxy-servlet</artifactId>
    <version>1.7</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
</dependency>

第二步:配置文件

# 代理的本地路由规则
proxy.servlet_url: /api/*
# 要代理的地址
proxt.target_url: http://www.baidu.com

第三步:

import com.google.common.collect.ImmutableMap;
import org.mitre.dsmiley.httpproxy.ProxyServlet;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import javax.servlet.Servlet;
import java.util.Map;
 
/**
 * @ClassName: SolrProxyServletConfiguration
 * @Description: 反向代理
 * @author: 47
 * @date: 2020年03月24日 12:11
 */
@Configuration
public class SolrProxyServletConfiguration {
    /**
     * 读取配置文件中路由设置
     */
    @Value("${proxy.servlet_url}")
    private String servletUrl;
    /**
     * 读取配置中代理目标地址
     */
    @Value("${proxy.target_url}")
    private String targetUrl;
 
    @Bean
    public Servlet createProxyServlet(){
        // 创建新的ProxyServlet
        return new ProxyServlet();
    }
 
    @Bean
    public ServletRegistrationBean proxyServletRegistration(){
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(createProxyServlet(), servletUrl);
        //设置网址以及参数
        Map<String, String> params = ImmutableMap.of(
                "targetUri", targetUrl,
                "log", "true");
        registrationBean.setInitParameters(params);
        return registrationBean;
    }
}

第四步:测试效果

访问本地请求localhost:/api,可以看到已经代理到我们的目标地址了百度首页了

推荐阅读