作为网站的唯一入口,控制权限,保证网站安全:SpringCloud_Zuul

news/2024/5/19 8:33:09/文章来源:https://blog.csdn.net/fhkkkbfgggjk/article/details/84882901

为什么要学习网关?

答:作为网站的唯一入口,控制权限,保证网站安全

功能:控制权限(鉴权)、分发请求(动态路由)

前言:来模拟一个需要用网关的场景

使用Spring Cloud实现微服务的架构基本成型,大致是这样的:
在这里插入图片描述
我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过Ribbon或Feign实现服务的消费以及均衡负载;为了使得服务集群更为健壮,使用Hystrix的融断机制来避免在微服务架构中个别服务出现异常时引起的故障蔓延。

在该架构中,我们的服务集群包含:内部服务Service A和Service B,他们都会注册与订阅服务至Eureka Server,而Open Service是一个对外的服务,通过均衡负载公开至服务调用方。我们把焦点聚集在对外服务这块,直接暴露我们的服务地址,这样的实现是否合理,或者是否有更好的实现方式呢

先来说说这样架构需要做的一些事儿以及存在的不足

  • 首先,破坏了服务无状态特点。
    • 为了保证对外服务的安全性,我们需要实现对服务访问的权限控制,而开放服务的权限控制机制将会贯穿并污染整个开放服务的业务逻辑,这会带来的最直接问题是,破坏了服务集群中REST API无状态的特点。
    • 从具体开发和测试的角度来说,在工作中除了要考虑实际的业务逻辑之外,还需要额外考虑对接口访问的控制处理。
  • 其次,无法直接复用既有接口。
    • 当我们需要对一个即有的集群内访问接口,实现外部服务访问时,我们不得不通过在原有接口上增加校验逻辑,或增加一个代理调用来实现权限控制,无法直接复用原有的接口。

面对类似上面的问题,我们要如何解决呢?答案是:服务网关!

为了解决上面这些问题,我们需要将权限控制这样的东西从我们的服务单元中抽离出去,而最适合这些逻辑的地方就是处于对外访问最前端的地方,我们需要一个更强大一些的均衡负载器的 服务网关。

服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

官网:https://github.com/Netflix/zuul
在这里插入图片描述
Zuul:维基百科:

电影《捉鬼敢死队》中的怪兽,Zuul,在纽约引发了巨大骚乱。

事实上,在微服务架构中,Zuul就是守门的大Boss!一夫当关,万夫莫开!
在这里插入图片描述

Zuul加入后的架构

在这里插入图片描述
不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都会经过Zuul这个网关,然后再由网关来实现 鉴权、动态路由等等操作。Zuul就是我们服务的统一入口。

在这里插入图片描述

创建网关的步骤:

1 创建项目

2 导入jar包:spring-cloud-starter-netflix-zuul

3 配置yml文件

4 开启网关服务

5 修改代码

网关功能:

  1. 动态路由(分发请求)
    • 只需要在yml中配置路由对应的路径,即可
  2. 负载均衡
  3. 权限控制

创建项目 用脚本

在这里插入图片描述
在这里插入图片描述

3.3.2.编写启动类

通过@EnableZuulProxy注解开启Zuul的功能:

@SpringBootApplication
@EnableZuulProxy // 开启Zuul的网关功能
public class ZuulDemoApplication {public static void main(String[] args) {SpringApplication.run(ZuulDemoApplication.class, args);}
}

3.3.3.编写配置

server:port: 10010 #服务端口
spring: application:  name: api-gateway #指定服务名

3.3.4.编写路由规则

我们需要用Zuul来代理user-service服务,先看一下控制面板中的服务状态:

在这里插入图片描述

  • ip为:127.0.0.1
  • 端口为:8081

映射规则:

zuul:routes:user-service: # 这里是路由id,随意写path: /user-service/** # 这里是映射路径url: http://127.0.0.1:8081 # 映射路径对应的实际url地址

我们将符合path 规则的一切请求,都代理到 url参数指定的地址

本例中,我们将 /user-service/**开头的请求,代理到http://127.0.0.1:8081

动态路由,路径应该是动态的才对

3.4.1.添加Eureka客户端依赖:zuul整合eureka

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

3.4.2.开启Eureka客户端发现功能

@SpringBootApplication
@EnableZuulProxy // 开启Zuul的网关功能
@EnableDiscoveryClient
public class ZuulDemoApplication {public static void main(String[] args) {SpringApplication.run(ZuulDemoApplication.class, args);}
}

3.4.3.添加Eureka配置,获取服务信息

eureka:client:registry-fetch-interval-seconds: 5 # 获取服务列表的周期:5sservice-url:defaultZone: http://127.0.0.1:10086/eurekainstance:prefer-ip-address: trueip-address: 127.0.0.1

3.4.4.修改映射配置,通过服务名称获取

因为已经有了Eureka客户端,我们可以从Eureka获取服务的地址信息,因此映射时无需指定IP地址,而是通过服务名称来访问,而且Zuul已经集成了Ribbon的负载均衡功能。

zuul:routes:user-service: # 这里是路由id,随意写path: /user-service/** # 这里是映射路径service-id: user-service # 指定服务名称

启动测试
再次启动,这次Zuul进行代理时,会利用Ribbon进行负载均衡访问:
在这里插入图片描述

Zuul把Eureka里面所有的IP都拉取了过来。无需配置,因为都是默认配置好的,虽然我们看不见,也无需配置ribbon,因为自身携带。

日志中可以看到使用了负载均衡器:
在这里插入图片描述

3.5.简化的路由配置

在刚才的配置中,我们的规则是这样的:

  • zuul.routes.<route>.path=/xxx/**: 来指定映射路径。<route>是自定义的路由名
  • zuul.routes.<route>.serviceId=/user-service:来指定服务名。

而大多数情况下,我们的<route>路由名称往往和 服务名会写成一样的。因此Zuul就提供了一种简化的配置语法:zuul.routes.<serviceId>=<path>

比方说上面我们关于user-service的配置可以简化为一条:

zuul:routes:user-service: /user-service/** # 这里是映射路径

省去了对服务名称的配置。

3.6.默认的路由规则

在使用Zuul的过程中,上面讲述的规则已经大大的简化了配置项。但是当服务较多时,配置也是比较繁琐的。因此Zuul就指定了默认的路由规则:

  • 默认情况下,一切服务的映射路径就是服务名本身。
    • 例如服务名为:user-service,则默认的映射路径就是:/user-service/**

也就是说,刚才的映射规则我们完全不配置也是OK的,不信就试试看。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_761936.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进行网站设计之母版页

建立站点地图&#xff1a;web.sitemap 创建模板页面:Template.master 下面的代码为Template.master文件定义了标准的HTML元标记和页头。 页头&#xff1a;放一些DIV容器&#xff0c;一个用于菜单链接&#xff0c;一个用于登录框&#xff0c;另一个用于选择主题(一个包含了可选主…

50个极佳的企业网站案例

目前&#xff0c;大多数企业转向Web开发&#xff0c;无论是广告还是开发公司.. 在这个阶段&#xff0c;网页设计师和开发人员发挥了重要作用。 现在&#xff0c; 我们为您带来了50个极佳的企业网站案例&#xff0c;希望能给您带来灵感&#xff0c;在同一个项目或者在未来的网站…

把http网站改为Https网站

腾讯云申请完证书后添加到服务器的方法&#xff1a; https://www.qcloud.com/document/product/400/4143#2.-nginx.E8.AF.81.E4.B9.A6.E9.83.A8.E7.BD.B2申请SSL证书的常见网站有&#xff1a; https://letsencrypt.org/ https://www.startssl.com/ &#xff08;免费&#xff0…

判断是否是爬虫在访问网站

实现代码如下&#xff1a; 转载于:https://www.cnblogs.com/lovebing/p/7742451.html

整理的一些个人觉得不错的国外【图形学】技术论坛和个人网站,以后还会陆续更新...

官网&#xff1a; http://developer.nvidia.com/node/76 http://msdn.microsoft.com/en-us/library/ee663274(vvs.85) http://www.computer.org/portal/web/computingnow/cga http://developer.amd.com/Pages/default.aspx http://www.spacesimulator.net/index.php?phome htt…

做网站SEO优化,这些网络引流方法,你应该知道

对于网站SEO优化来说&#xff0c;网站流量的重要性不言而喻&#xff01;国内的站长平台工具通过用网站流量来衡量一个网站的权重&#xff0c;当你的网站流量很高的时候&#xff0c;同时会影响你网站的权重&#xff0c;进而影响你网站SEO优化排名。所以说流量对于一个网站的意义…

一个有趣的创客网站分享

http://mc.dfrobot.com.cn/portal.php 转载于:https://www.cnblogs.com/vectors07/p/7976494.html

学用MVC4做网站一:修改密码1.3

一用户 1.1用户注册 1.2用户登录 1.3修改密码 修改密码会用到一个UserChangePassword 模型类&#xff0c;先添加UserChangePassword类 /// <summary>/// 用户修改密码模型/// </summary>[NotMapped]public class UserChangePassword{/// <summary>/// 原密码…

如何快速增加百度相关域提升网站权重

早上在论坛seo版块&#xff0c;发现有人问为什么domain&#xff1a;域名后在结果里&#xff0c;怎么会出现网站本身的页面呢?如图&#xff1a; 这让我联想我们在查询网站数据的时候&#xff0c;总会出现如图下面显示&#xff0c;百度反链多少&#xff0c;点击链接就是domain&a…

优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 内存性能

好久没写博客了&#xff0c;一方面是日常工作繁忙&#xff0c;另外一方面是想更多的时间陪陪家里人&#xff0c;享受春天的美好时光&#xff0c;同时还在写一本《程序员&#xff0c;你伤不起》的一本书要由人民邮电出版社出版&#xff1b;我的性格可能也跟大多数程序员类似吧&a…

方维系统,在tip.htm和inc\u\u_menu.htm调用账号绑定状态,已绑定的可链接到该用户在对应网站的地址...

方维系统&#xff0c;在tip.htm和inc\u\u_menu.htm调用账号绑定状态&#xff0c;已绑定的可链接到该用户在对应网站的地址 在tip.htm和inc\u\u_menu.htm调用账号绑定状态&#xff0c;已绑定的可链接到该用户在对应网站的地址 实现类似这样的效果 举例&#xff1a;u_menu.htm&am…

思维导图形式带你读完《大型网站技术架构》上

最近跟着视频做的一个网站用到了soa架构&#xff0c;nginx反向代理&#xff0c;redis集群&#xff0c;dubbo等等优化网站性能的技术。所以决定看一下《大型网站技术架构》这本书&#xff0c;这本书真心感觉不错&#xff0c;里面没有什么代码和晦涩难懂的知识&#xff0c;一般人…

礼品代发网站源码_礼品快递代发——如何挑选靠谱的礼品代发网站?

电商老人都知道&#xff0c;只有礼品单以及拍A发B才能提供最真实的物流信息。但卖家自己快递礼品的话&#xff0c;除了需要快递成本&#xff0c;还有采购成本、仓储成本、人工打包费用、快件包装费用等&#xff0c;极端条件下甚至会产生快件破损丢失的情况&#xff0c;综合成本…

微软网站打不开_更换空间影响网站优化?这样做比原先排名更靠前!

1马上就是清明小长假了&#xff0c;然后是五一小长假plus&#xff0c;再接下来就是端午小长假...接踵而至的各种小长假期间&#xff0c;我们要考虑竞价推广投放问题(这个问题&#xff0c;老牛之前有跟大家讨论过&#xff0c;点此爬楼查看)。然而网站的竞价广告提前设置好了&…

python 判断 网站是否是动态_Python语法速览与实战清单,不知道大家学的怎么样了?...

基础语法Python 是一门高阶、动态类型的多范式编程语言&#xff1b;定义 Python 文件的时候我们往往会先声明文件编码方式:继续给大家分享我的学习地址&#xff0c;我也不想多说了&#xff0c;有需要的就进来吧&#xff01;让我来带大家一起学习&#xff01;# 指定脚本调用方式…

网站克隆工具_Kali Linux工具篇十三:网站克隆技巧Httrack使用技巧

本公众号所有分享&#xff0c;仅做学习交流&#xff0c;切勿用于任何不法用途&#xff01;一、HTTrack是什么&#xff1f;HTTrack 是一个免费并易于使用的线下浏览器工具&#xff0c;全称是 HTTrack Website Copier for Windows&#xff0c;它能够让你从互联网上下载指定的网站…

Asp.Net与SEO – 庞大的反向链接网络(二)

上篇文章提到反向链接的概念&#xff0c;现在我就从增加反向链接的方法来谈谈作为一个程序员应该怎么为增加反向链接做一些SEO工作。 1. 内部链接优化对于很多大型网站&#xff0c;由于网站自身都拥有几百万个网页&#xff0c;所以对网站内部链接进行重新优化构架之后&#xff…

网站启用GZip压缩后,速度快了3倍!

GZip压缩&#xff0c;是一种网站速度优化技术&#xff0c;也是一把SEO优化利器&#xff0c;许多网站都采用了这种技术&#xff0c;以达到提升网页打开速度、缩短网页打开时间的目的。 本文是一篇研究性文章&#xff0c;将通过某个案例来给大家显示网站采用GZip压缩前后的对比效…

夺命雷公狗ThinkPHP项目之----企业网站24之网站前台获取当前栏目和顶级栏目

我们现在要实现的是取出网站当前栏目名称和顶级分类名称&#xff0c;如下所示&#xff1a; 列表页的和单页的不能总是写死的吧&#xff1f;&#xff1f; 我能就要想办法去让他变活的才可以解决问题噢&#xff0c;我们已经有了他的cate_id &#xff0c;然后我们就可以通过cate_i…

宝塔面板快速配置网站SSL证书(HTTPS)

既然已经知道用宝塔来搭网站&#xff0c;那我就默认看本文的看官们都已经在宝塔里部署好网站了~本文只记录如何将网站从http转为更为安全的https 1. 在宝塔面板里选择想要上锁的网站&#xff0c;点击设置 2. 先找到ssl, 然后选择其他证书&#xff08;也可以是宝塔ssl、lets E…