千家信息网

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

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章给大家分享的是有关springboot如何配置多个请求服务代理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。springboot 配置服务代理有时候,我们可能有下边
千家信息网最后更新 2025年02月23日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安全错误 数据库的锁怎样保障安全 小鸟云服务器创建虚拟网卡 爱快怎么设置内网存储服务器 微软服务器服务面板恢复默认设置 天津网络技术产品介绍 河北质量软件开发推广 大数据专业与网络安全专业 江西智能养老软件开发 程序员删除数据库需要密钥吗 国家网络安全的作文 中国网络安全领导小组 耐用的企业内网网络安全 数据库插入的数据怎么查询不出来 浙广办公连接服务器失败 360安全代理服务器产品 安徽专业软件开发费用是多少 网络安全会议工作部署 黄山app软件开发外包公司 网信部门和有关部履行网络安全法 软件开发企业开发形成产品 软件开发如何接活 曲周配件信息管理软件开发设计 数据库应用技术国开1256 四川手机软件开发工具 英雄联盟日服显示服务器连接 清空mysql表数据库表 济南正规的浪潮服务器价格 ice服务器开服时间表 山西网络安全非标机箱上哪找 多媒体数据库要解决的关键技术有 美国网络安全股市盈率
0