热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在重复造轮子的情况下用ProxyServlet反向代理来减少工作量

像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户

像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户使用起来就需要在不同产品工具间来回切换操作,为了提高用户友好性,同时重要的是能够方便的往外推广,这时候就需要打造一个集各个产品的平台,或者说简单点就是弄个统一入口,这个平台提炼了其他各个产品的优点进行整合。新平台说白了只是一个壳子,很多核心功能的实现是在其他各个产品达成的,有现成的接口,新平台的大部分研发工作是对现有的接口进行整合。很多功能的实现只需要调用第三方接口即可,这时候就可以使用反向代理来达到目的,使得新平台的后端工作量极大减少,提高工作效率。比如一整套产品生命周期大致分为:架构设计评审实施、产品研发、代码管理、上线交付、运维监控等等,整个生命周期的维护需要使用到不同的平台,功能发散,不好统一发展,整合之后整条生命线显得清晰明了,用户使用方便,便于规划。

反向代理:服务器收到客户端的请求之后,把请求再转发到内部的其他服务中,收到其他服务的响应之后,把响应返回给客户端。在过程中可能会做一些日志,缓存之类的,比如NG就可以作为一个典型的反向代理服务器,除此之外,在自己实现的服务中可以使用ProxyServlet来达到这样的代理目的。

通过如下案例来看一下在springboot中ProxyServlet是如何使用的

设置两个代理,一个当请求包含/csdn/路径时,将请求转发到https://blog.csdn.net/,一个当请求包含/local/路径时,将请求转发到http://127.0.0.1:8080/

org.mitre.dsmiley.httpproxysmiley-http-proxy-servlet1.9

import org.mitre.dsmiley.httpproxy.ProxyServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ServletConfig {@Beanpublic ServletRegistrationBean

CSNDServletServletRegistrationBean() {ServletRegistrationBean servletRegistratiOnBean= new ServletRegistrationBean(new ProxyServlet(), "/csdn/*");servletRegistrationBean.setName("csnd-proxy");servletRegistrationBean.addInitParameter("targetUri", "https://blog.csdn.net/");servletRegistrationBean.addInitParameter("http.read.timeout", "10000");servletRegistrationBean.addInitParameter("http.socket.timeout", "10000");servletRegistrationBean.addInitParameter("http.connection.request.timeout", "3000");servletRegistrationBean.addInitParameter("log", "true");return servletRegistrationBean;}@Beanpublic ServletRegistrationBean

localServletServletRegistrationBean() {ServletRegistrationBean servletRegistratiOnBean= new ServletRegistrationBean(new ProxyServlet(), "/local/*");servletRegistrationBean.setName("local-proxy");servletRegistrationBean.addInitParameter("targetUri", "http://127.0.0.1:8080/");servletRegistrationBean.addInitParameter("http.read.timeout", "10000");servletRegistrationBean.addInitParameter("http.socket.timeout", "10000");servletRegistrationBean.addInitParameter("http.connection.request.timeout", "3000");servletRegistrationBean.addInitParameter("log", "true");return servletRegistrationBean;}}

启动服务之后来看下效果

可以看出访问http://127.0.0.1:8080/csdn/qq_34485626的效果跟访问https://blog.csdn.net/qq_34485626的效果是一样的,说明代理成功。


http://127.0.0.1:8080/csdn/qq_34485626的效果

 


https://blog.csdn.net/qq_34485626的效果

 

http://127.0.0.1:8080/local/test/proxy和http://127.0.0.1:8080/test/proxy的效果也是一样

@RequestMapping(value = "/test/proxy" , method = RequestMethod.GET)
@ResponseBody
public String proxy() {return "proxy successfully";
}

 

 

 

 

 


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文详细介绍了在企业级项目中如何优化 Webpack 配置,特别是在 React 移动端项目中的最佳实践。涵盖资源压缩、代码分割、构建范围缩小、缓存机制以及性能优化等多个方面。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • andr ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
author-avatar
啊啦哈200601
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有