在Spring应用调试中实现反向代理服务器
2017-12-12 17:32
501 查看
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
简单来说,你的反向代理服务器会接收请求,但其自身不处理该请求,而是对请求经过一些处理,例如添加日志、缓存、身份验证等服务,然后再将请求转发到相应的应用服务器中进行处理,最后将处理结果返回。
接下来我们自己实现一个可以个性化配置的反向代理服务器,我们的系统使用了maven作为版本管理,Spring + spring-boot作为框架以帮助我们快速搭建我们的web应用。如果大家对如何搭建一个web应用有兴趣,可以学习我们的Java
Web全栈开发,这里不过多描述。大家把代码下载下来后,进入系统根目录,运行mvn spring-boot:run,即可运行该系统。
注:目前我们使用8888端口,如果需要更改,可以修改
打开浏览器,访问http://localhost:8080,发现我们进入到了百度首页,进行搜索、翻页等操作,发现行为和百度一模一样,但是域名仍然是我们的
首先是添加依赖,除了Spring-boot最基本依赖外,我们还依赖了两个库,一个是Google的guava库,里面包含了Google的很多核心库,我们主要使用其中的集合。另一个是代理的核心库
引入依赖后,我们只需要声明一个proxy的servlet,并对其进行配置即可:
我们可以看到,只需要对targetURi进行设置,表明ProxyServlet需要代理http://baidu.com,然后将所有
简单来说,你的反向代理服务器会接收请求,但其自身不处理该请求,而是对请求经过一些处理,例如添加日志、缓存、身份验证等服务,然后再将请求转发到相应的应用服务器中进行处理,最后将处理结果返回。
运行反向代理服务器
接下来我们自己实现一个可以个性化配置的反向代理服务器,我们的系统使用了maven作为版本管理,Spring + spring-boot作为框架以帮助我们快速搭建我们的web应用。如果大家对如何搭建一个web应用有兴趣,可以学习我们的JavaWeb全栈开发,这里不过多描述。大家把代码下载下来后,进入系统根目录,运行mvn spring-boot:run,即可运行该系统。
注:目前我们使用8888端口,如果需要更改,可以修改
src/main/resources/application.properties文件的server.port属性。
我们就是百度
打开浏览器,访问http://localhost:8080,发现我们进入到了百度首页,进行搜索、翻页等操作,发现行为和百度一模一样,但是域名仍然是我们的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需要代理http://baidu.com,然后将所有
/*交给
baiduProxyServlet()进行处理即可。
相关文章推荐
- Spring - Java/J2EE Application Framework 应用框架 第 15 章 EJB的存取和实现
- Spring系列【04】应用@Autowired注解实现Bean的注入
- 实现spring+mybatis+uncode dal,应用自动切换连接数据库
- 使用CoreProfiler/NanoProfiler实现跨平台&应用的整合性能调试
- Spring AOP 实现原理与CGLIB应用
- spring多数据源的处理 mybatis实现跨库查询 实现Myibatis动态sql跨数据库的处理 Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样
- Redis应用1---Spring Session + Redis 实现Session的分布式存储
- Spring AOP 实现原理与 CGLIB 应用
- Maven + Spring MVC+Mybatis + MySQL +AngularJS + Bootstrap 实现简单微博应用(二)访问数据库
- 实现Spring AOP 应用的几种方式
- 第一个 spring Boot 应用通过Docker 来实现构建、运行、发布
- Spring AOP 实现原理与 CGLIB 应用
- Android实现无线调试自己的应用
- Spring AOP 实现原理与 CGLIB 应用
- 使用myeclipse 应用struts2 + spring + hibernate 实现CRUD
- 通过JVM 参数 实现spring 应用的二进制代码与配置分离。
- Quartz+Spring实例应用【一】基于Spring的MethodInvokingJobDetailFactoryBean实现
- Spring AOP 实现原理与 CGLIB 应用
- spring boot 实际应用(三)发送邮件实现
- Spring AOP 实现原理与 CGLIB 应用