当前位置: 首页 > news >正文

Spring Cloud Gateway - GatewayFilter路由过滤器

本文会对Spring cloud Gateway 作更深入的应用解析。

既然网关会对请求进行权限验证, 这一步就会在GatewayFilter里实现。

路由过滤器 GatewayFilter

Filter 可以对进入网关的请求进行处理 , 例如读取/修改 Headers…
同样地, 可以对微服务返回的相应(response) 做处理(例如 enable CORS)再返回给客户端。

在这里插入图片描述



过滤器工厂 GatewayFilterFactories

Spring Cloud 已经提供了各种各样的过滤器工厂, 我们很难对它们都研究透彻。
但是, Spring的文档和很完善

https://cloud.spring.io/spring-cloud-gateway/reference/html/#gatewayfilter-factories

里面已经有完善的解析和例子。

例如:
AddRequestHeader

这个一看就是用来对请求加上Header的
在这里插入图片描述
用的时候查阅文档无脑向配置文件写就行。

例子

Api gateway 的配置文件, 加上:

        - id: demo-cloud-user-service_check_header
            # uri: http://xxx.xx.xxx.x:xxxx  Not suggestion to use
          uri: lb://demo-cloud-user-service  # lb means load balance
          predicates: # url mapping
              - Path=/checkheader/**
          filters:
              - AddRequestHeader=tokenA, AAAAA
              - AddRequestHeader=tokenB, BBBBB

作用于user service的checkheader 下面的url
然后为所有请求加上两个header tokenA tokenB

在user sevice上加上1个HeaderController:

@RestController
@RequestMapping("/checkheader")
public class HeaderController {

    @Autowired
    private UserService userService;

    @GetMapping("/user/{id}")
    public User queryById(@PathVariable("id") Long id,
                          @RequestHeader(value="tokenA", required = false) String tokenA,
                          @RequestHeader(value="tokenB", required = false) String tokenB) {
        User user = userService.queryById(id);
        String tokens = String.format("token A: %s, token B: %s", tokenA, tokenB);
        user.setAddress(user.getAddress() + tokens);
        return user;
    }
}

注意在controller的接口加上两个接受Header的参数。
然后把token 加在地址上返回给前段

测试:
在这里插入图片描述

默认Filters, default-filters

如果我们想令某个Filter对全局生效, 所谓全局就是Gateway 所有的API
那么我们可以利用default-filters

server:
  port: 8890

spring:
  application:
    name: demo-cloud-api-gateway # cannot use _
  cloud:
    gateway:
      routes:
        - id: demo-cloud-user-service
        # uri: http://xxx.xx.xxx.x:xxxx  Not suggestion to use
          uri: lb://demo-cloud-user-service  # lb means load balance
          predicates: # url mapping
            - Path=/user/**
        - id: demo-cloud-user-service_check_header
            # uri: http://xxx.xx.xxx.x:xxxx  Not suggestion to use
          uri: lb://demo-cloud-user-service  # lb means load balance
          predicates: # url mapping
            - Path=/checkheader/**
          filters:
            - AddRequestHeader=tokenA, AAAAA
            - AddRequestHeader=tokenB, BBBBB
        - id: demo-cloud-user-service
          uri: lb://demo-cloud-order-service  # lb means load balance
          predicates: # url mapping
            - Path=/order/**
      default-filters:
        - AddRequestHeader=tokenGlobal, GGGGG

相关文章:

  • 猿创征文|大数据之Kafka简介+基操
  • Shiro授权--注解式开发
  • CREO:CREO软件之零件【编辑】之修饰、用户定义特征的简介及其使用方法(图文教程)之详细攻略
  • Java并发 | 12.[方法] interrupt( )打断
  • SpringBoot 事务开发代码及注意事项
  • onnx: step = 1 is currently not supported
  • webpack原理篇(六十五):实战开发一个压缩构建资源为zip包的插件
  • 数学建模学习(97):花授粉算法(FPA)寻优
  • 鲈鱼的面试题库+答案
  • CREO:CREO软件之零件【工具(调查/模型意图/实用工具)】、【视图(可见性/方向/模型显示/显示/窗口)】的简介及其使用方法(图文教程)之详细攻略
  • 【单细胞高级绘图】09.细胞通讯_两组比较_连线图
  • Tensorflow笔记——基于Mnist数据集图片分类的神经网络
  • 情侣积分微信小程序零基础开发教程(附代码及开发指南)
  • 为什么重写equals方法必须也要重写hashCode方法
  • 只要十分钟!带你了解Redis Cluster
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • gf框架之分页模块(五) - 自定义分页
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Python实现BT种子转化为磁力链接【实战】
  • Spring Boot MyBatis配置多种数据库
  • 面试总结JavaScript篇
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端js -- this指向总结。
  • 前端之Sass/Scss实战笔记
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 微信小程序开发问题汇总
  • 微信小程序设置上一页数据
  • 我的面试准备过程--容器(更新中)
  • 消息队列系列二(IOT中消息队列的应用)
  • 原生 js 实现移动端 Touch 滑动反弹
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # Panda3d 碰撞检测系统介绍
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)JPA - JQPL 实现增删改查
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)ObjectiveC 深浅拷贝学习
  • (转)visual stdio 书签功能介绍
  • .NET开发者必备的11款免费工具
  • @angular/cli项目构建--Dynamic.Form
  • @ComponentScan比较
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @SpringBootApplication 包含的三个注解及其含义
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [cogs2652]秘术「天文密葬法」
  • [ComfyUI进阶教程] animatediff视频提示词书写要点