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

 

 

 

 

 


推荐阅读
  • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了如何在 Spring Boot 应用中通过 @PropertySource 注解读取非默认配置文件,包括配置文件的创建、映射类的设计以及确保 Spring 容器能够正确加载这些配置的方法。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 本文介绍如何在Spring Boot项目中集成Redis,并通过具体案例展示其配置和使用方法。包括添加依赖、配置连接信息、自定义序列化方式以及实现仓储接口。 ... [详细]
  • Spring Boot单元测试中Redis连接失败的解决方案
    本文探讨了在Spring Boot项目中进行单元测试时遇到Redis连接问题的原因及解决方法,详细分析了配置文件加载路径不当导致的问题,并提供了有效的解决方案。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
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社区 版权所有