在Spring应用调试中实现反向代理服务器

Posted 天码营

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Spring应用调试中实现反向代理服务器相关的知识,希望对你有一定的参考价值。

「内容简介」今天来实现一个可以个性化配置的反向代理服务器。反向代理服务器会接收请求,但其自身不处理该请求,而是对请求经过一些处理,例如添加日志、缓存、身份验证等服务,然后再将请求转发到相应的应用服务器中进行处理,最后将处理结果返回。

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

简单来说,你的反向代理服务器会接收请求,但其自身不处理该请求,而是对请求经过一些处理,例如添加日志、缓存、身份验证等服务,然后再将请求转发到相应的应用服务器中进行处理,最后将处理结果返回。

运行反向代理服务器

接下来我们自己实现一个可以个性化配置的反向代理服务器,我们的系统使用了maven作为版本管理,Spring + spring-boot作为框架以帮助我们快速搭建我们的web应用。如果大家对如何搭建一个web应用有兴趣,可以学习我们的,这里不过多描述。大家把代码下载下来后,进入系统根目录,运行mvn spring-boot:run,即可运行该系统。

注:目前我们使用8888端口,如果需要更改,可以修改src/main/resources/application.properties文件的server.port属性。

我们就是百度

打开浏览器,访问,发现我们进入到了百度首页,进行搜索、翻页等操作,发现行为和百度一模一样,但是域名仍然是我们的localhost:8080。接下来,我们来看看如何达到这样的效果。

首先是添加依赖,除了Spring-boot最基本依赖外,我们还依赖了两个库,一个是Google的guava库,里面包含了Google的很多核心库,我们主要使用其中的集合。另一个是代理的核心库smiley-http-proxy-servlet,是github上的一个开源项目:

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

引入依赖后,我们只需要声明一个proxy的servlet,并对其进行配置即可:

@Bean
public Servlet baiduProxyServlet(){
    return new ProxyServlet();
}

@Bean
public ServletRegistrationBean proxyServletRegistration(){
    ServletRegistrationBean registrationBean = new ServletRegistrationBean(baiduProxyServlet(), "/*");
    Map<String, String> params = ImmutableMap.of(
            "targetUri", "http://baidu.com", 
            "log", "true");
    registrationBean.setInitParameters(params);
    return registrationBean;
}

我们可以看到,只需要对targetURi进行设置,表明ProxyServlet需要代理,然后将所有/*交给baiduProxyServlet()进行处理即可。


点击下方“阅读原文”,可以获得更多天码营教程。

以上是关于在Spring应用调试中实现反向代理服务器的主要内容,如果未能解决你的问题,请参考以下文章

在反向代理后面使用 SP 时出现 Spring saml 问题

如何在spring代理中实现自我调用(self-invocation)

如何在spring代理中实现自我调用(self-invocation)

带有两种 SSL 到 weblogic 的 nginx 反向代理

NGINX 反向代理背后的 Spring Boot API REST

在 webview 片段中实现后退按钮