热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

zuul网关_一、Zuul网关

网关在整个微服务的系统中角色是非常重要的。很多公司网关都是自己写的。网关的作用非常多,比如路由、限流、降级、安全控制、服务的聚合。目前有哪些技术可以用来做网关

网关在整个微服务的系统中角色是非常重要的。很多公司网关都是自己写的。网关的作用非常多,比如路由、限流、降级、安全控制、服务的聚合。

目前有哪些技术可以用来做网关:

- nginx upstream app{ip,ip,ip}

- spring cloud gateway

- netflix zuul

- 自定义网关

1. 使用网络做接口路由

步骤一: 引入依赖

org.springframework.cloudspring-cloud-starter-netflix-zuul

步骤二:编写配置文件

556459f07badb17814670dfc14f0d8ce.png

步骤三:打上注解

@EnableDiscoveryClient@EnableZuulProxy
@SpringBootApplicationpublic class QfSpringCloudNetflixZuulApplication {public static void main(String[] args) {SpringApplication.run(QfSpringCloudNetflixZuulApplication.class, args);}}

2. 统一前缀的设置

strip-prefix: true 时,在接口中使用的路径,是接口真实存在的路径。

1)全局路径的设置

2f95154ac216b09b893be5606381fa54.png

1)局部路径的设置

20610d6c07f6bd6b4175c1a8adb5d380.png

3. 保护敏感路径

/**/admin/**

在zuul的配置文件中加入这一段:

ignored-patterns: /**/admin/**

那么接口中只要带有/admin/的,就都不能访问

4. 过滤掉敏感头

zuul:routes:api-a:path: /api/a/**serviceId: hello-spring-cloud-web-admin-ribbon# stripPrefix: false
# 是可以携带COOKIE,如果不加的话,那COOKIE携带不过来
sensitiveHeaders:

5. 设置服务的回调方法实现服务降级

通过创建一个FallbackProvider的实现类,在类中指明错误回调内容

@Componentpublic class MyGatewayFallback implements FallbackProvider {/*设置要对哪些服务进行错误回调,return 具体的服务名称,也可以return "*" 获得return null ==>对所有服务进行错误回调*/
@Overridepublic String getRoute() {return "hello-spring-cloud-web-admin-ribbon";}/*具体的回调内容*/
@Overridepublic ClientHttpResponse fallbackResponse(String route, Throwable cause) {return new ClientHttpResponse() {/*返回一个状态码*/
@Overridepublic HttpStatus getStatusCode() throws IOException {return HttpStatus.OK;}@Overridepublic int getRawStatusCode() throws IOException {return HttpStatus.OK.value();}@Overridepublic String getStatusText() throws IOException {return HttpStatus.OK.getReasonPhrase();}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {ObjectMapper objectMapper = new ObjectMapper();Map map = new HashMap();map.put("status",200);map.put("message","无法连接,请检查您的网络");return new ByteArrayInputStream(objectMapper.writeValueAsBytes(map));}@Overridepublic HttpHeaders getHeaders() {HttpHeaders headers = new HttpHeaders();// 和 getBody 中的内容编码一致
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);return headers;}};}
}

6. 网关过滤器的用法

1)过滤器的类型

2)过滤器该怎么样实现过滤和放行

@Componentpublic class MyZuulFilter extends ZuulFilter {/*配置过滤器类型,根据生命周期的不同,有四种类型1.pre: 路由之前2.routing: 路由之时3.post: 路由之后4.error: 在上面三者执行过程中出现了异常就会调用该error过滤器*/
@Overridepublic String filterType() {return "pre";}//相同过滤器类型之间确定执行的顺序,0就表示第一个执行。
@Overridepublic int filterOrder() {return 0;}/*配置是否需要过滤:true 需要 false 不需要*/
@Overridepublic boolean shouldFilter() {return true;}/*** 过滤器要执行过滤的具体的内容* 如果这一次请求,没有携带COOKIE,那么就不进行路由。* @return
* @throws ZuulException*/
@Overridepublic Object run() throws ZuulException {//得到request的当前的上下文对象
RequestContext ctx = RequestContext.getCurrentContext();//得到request对象
HttpServletRequest request = ctx.getRequest();COOKIE[] COOKIEs = request.getCOOKIEs();if(COOKIEs==null||COOKIEs.length==0){//不进行路由
ctx.setSendZuulResponse(false);//设置返回状态码
ctx.setResponseStatusCode(401);//设置返回体
ctx.setResponseBody("no permission");//设置自定义键值对
ctx.set("isSuccess",false);}else{//进行路由
ctx.setSendZuulResponse(true);ctx.setResponseStatusCode(200);ctx.set("isSuccess",true);}return null;}
}

过滤器的执行流程

260b1df6c2fd81f9694b871b580e10c6.png



推荐阅读
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
author-avatar
Tow-face信信
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有