在项目开发中,使用springboot开发一个非前端后端分离的项目,项目实际使用中需要使用,需要调用老系统中的接口,因此想实现反向代理,通过前端代码直接访问老系统中的接口
1. 引入相关依赖
<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>
2. 配置相关代理设置
# 自定义代理相关配置
# 代理的本地路由
proxy.servlet_url: /api/*
# 要代理的地址
proxt.target_url: http://www.baidu.com
3. 声明proxy的servlet,并对其进行配置即可:
package top.jetlee.wx.Config;
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;
/**
* @Description: 实现代理配置
* @Parameters:
* @Return:
* @CreateDate: 2019/7/19 9:52
* @Version: V1.00
* @Author: jetlee
*/
@Configuration
public class SolrProxyServletConfiguration {
// 读取配置文件中路由设置
@Value("${proxy.servlet_url}")
private String servlet_url;
// 读取配置中代理目标地址
@Value("${proxt.target_url}")
private String target_url;
@Bean
public Servlet createProxyServlet(){
// 创建新的ProxyServlet
return new ProxyServlet();
}
@Bean
public ServletRegistrationBean proxyServletRegistration(){
ServletRegistrationBean registrationBean = new ServletRegistrationBean(createProxyServlet(), servlet_url);
//设置网址以及参数
Map<String, String> params = ImmutableMap.of(
"targetUri", target_url,
"log", "true");
registrationBean.setInitParameters(params);
return registrationBean;
}
}
3.测试效果
访问本地请求,可以看到已经代理到我们的目标地址了