千家信息网

springboot如何配置多个请求服务代理

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章给大家分享的是有关springboot如何配置多个请求服务代理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。springboot 配置服务代理有时候,我们可能有下边
千家信息网最后更新 2025年11月07日springboot如何配置多个请求服务代理

这篇文章给大家分享的是有关springboot如何配置多个请求服务代理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

springboot 配置服务代理

有时候,我们可能有下边这样的需求:

即,针对于分布式服务,我们会有多种业务接口服务,但是服务器上可能只要求开放一个服务的端口,比如上图的restA项目端口是对外开放的,但是restB项目端口并未对外开放,这样带来的问题就是,用户无法直接请求restB项目。

那就想到了可以通过访问restA ,请求路径符合一定规范的时候,比如http://ip:port/test ,当请求中以rest 开头时,可以再转发请求到restB 项目中即可。

当然代理转发 ,有很多的解决办法,nginx 、zuul 等都可以实现,但是nginx 虽然简单,但是总要多装一个服务;zuul 配置较为麻烦。

经过百度后,发现了一个特别简单的配置,即这里要说的东西,ServletRegistrationBean的注入,相当于是引入servlet ,没有具体看过 。

下面写一下配置步骤:

1、项目结构及介绍

下面是我的项目结构,以下选中蓝色的项目为我们要配置的项目,其他的项目先忽略,是我们基于dubbo 和zookeeper 配置的时候用的。

项目已放到GitHub 上,下载项目GitHub地址

关于这个项目的介绍是下边这样的,再配张图来介绍下:

上图中关于suiteoneservice 、suitetwoservice、masterservice 项目是我们的服务接口发布方项目。在这里我只是画出来,跟我们要配置的内容是无关的。

suiteone 、suitetwo 项目端口没有外放,用户不能直接访问,而master项目是可以直接访问的,所以用户是通过访问master 项目,再由master 项目对请求代理转发到这两个项目中。

2、具体配置步骤

主要的配置很少,都在master 项目中。

(1)引入依赖:

org.mitre.dsmiley.httpproxy smiley-http-proxy-servlet 1.7

(2)、配置一个配置类:

该类可以参照下载下来的,master 项目中的配置。

package microservice.sc.config;import org.mitre.dsmiley.httpproxy.ProxyServlet;import org.springframework.boot.bind.RelaxedPropertyResolver;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.EnvironmentAware;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.env.Environment;/** * Created by lsf on 2018/7/31. */@Configurationpublic class ProxyServletConfiguration implements EnvironmentAware { @Bean public ServletRegistrationBean servletRegistrationBean(){ ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new ProxyServlet(), propertyResolver.getProperty("servlet_url_one")); //这个setName必须要设置,并且多个的时候,名字需要不一样 servletRegistrationBean.setName("suitone"); servletRegistrationBean.addInitParameter("targetUri", propertyResolver.getProperty("target_url_one")); servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, propertyResolver.getProperty("logging_enabled", "false")); return servletRegistrationBean; } @Bean public ServletRegistrationBean servletRegistrationBean2(){ ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new ProxyServlet(), propertyResolver.getProperty("servlet_url_two")); //这个setName必须要设置,并且多个的时候,名字需要不一样 servletRegistrationBean.setName("suittwo"); servletRegistrationBean.addInitParameter("targetUri", propertyResolver.getProperty("target_url_two")); servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, propertyResolver.getProperty("logging_enabled", "false")); return servletRegistrationBean; } private RelaxedPropertyResolver propertyResolver; @Override public void setEnvironment(Environment environment) { this.propertyResolver = new RelaxedPropertyResolver(environment, "proxy.test."); }}

(3)、配置代理地址:

到master 项目的主配置文件,即application.properties 文件中,加入以下内容:

#请求testone时代理转发到30001项目中proxy.test.servlet_url_one=/testone/*proxy.test.target_url_one=http://localhost:30001#请求testtwo时代理转发到30002项目中proxy.test.servlet_url_two=/testtwo/*proxy.test.target_url_two=http://localhost:30002

上边的配置简单介绍一下,对于testone/* 这样的写法,意思就是当你的请求路径以testone 开头,比如http://localhost:30000/testone/test/get1 这样的路径,它请求的真实路径是http://localhost:30001/test/get1 。主要就是将testone 替换成对应的被代理路径而已,* 的意思就是实际请求项目中接口的路径!!!

30001 端口即suiteone项目,30002 端口即suitetwo 项目,下载项目之后,分别启动master 、suiteone 、suitetwo 项目的启动类,启动完成后,访问http://localhost:30000/testone/test/get1 ,即会返回suiteone 项目test/get1 接口的内容。

这种配置对get 、post 请求都有效。

感谢各位的阅读!关于"springboot如何配置多个请求服务代理"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

项目 配置 代理 服务 端口 路径 内容 多个 就是 接口 时候 用户 开放 上图 名字 地址 对外开放 开头 意思 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 公安部网络安全保卫局二处 重庆垫江众道生鲜软件开发 国开电大计算机网络技术专科论文 如何把管家婆数据库放在云端 什么是网络安全工程 如何有效的防止网络安全 mysql数据库字段大小规范 一个服务器电源能带两个主板吗 幻塔经常无法连接服务器 人大金仓数据库客户端怎么使用 吃鸡服务器维护无法登录 pi实时数据库怎么导出数据 诚信经营桌面共享软件开发 运输网络技术有哪些 编程学到安卓软件开发要多久 广东省海洋产业系统专利数据库 数据库导入表表分区缺表 无人便利柜零售软件开发 网络安全爆发 服务器虚拟化毕业设计 从小白到网络安全专家 服务器芯片安全 陕西鼎驰网络技术有限公司 小学开展护苗网络安全教育 软件开发中的设计模式 数据通信网络技术电子书 山东水利网络技术专业怎么样 网络安全方面的电视节目 天津虚拟主机租用云空间云服务器 学音悦网络技术有限公司
0