热门标签 | 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";
}

 

 

 

 

 


推荐阅读
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 先看一段错误日志:###Errorqueryingdatabase.Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransie ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
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社区 版权所有