178 服务网关GateWay---局部过滤器(GatewayFilter)

这篇具有很好参考价值的文章主要介绍了178 服务网关GateWay---局部过滤器(GatewayFilter)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 网关过滤器

在微服务架构下,后端微服务可能都需要做一些重复相同的事情,如:认证鉴权、限流、黑白名单、日志收集等。对于这些需求当有了网关之后,就可以统一的在网关中实现即可,避免代码冗余。

gateway配置局部过滤器,java常用框架,gateway,java,nginx,springcloud,springoot,开发语言
​ 要实现这些功能,则需要通过网关的过滤器进行实现。网关的过滤器类型分为两种:局部过滤器(GatewayFilter)、全局过滤器(GlobalFilter)。
gateway配置局部过滤器,java常用框架,gateway,java,nginx,springcloud,springoot,开发语言

2 局部过滤器(GatewayFilter)

​ 局部过滤器只会应用到单个路由或者一个分组的路由上。Spring Cloud Gateway默认已经提供了很多局部过滤器供我们使用。

过滤器名称 作用
AddRequestHeader GateWayFilterFactory 添加请求头
AddRequestParameter GateWayFilterFactory 添加请求参数
AddRresponseHeader GateWayFilterFactory 添加响应头
Hystrix GateWayFilterFactory Hystrix过滤器
PrefixPath GateWayFilterFactory 路径前缀过滤器
PreserveHostHeader GateWayFilterFactory 保留请求头过滤器
RequestRateLimiter GateWayFilterFactory 请求限流过滤器
RedirectTo GateWayFilterFactory 重定向过滤器
RemoveNonProxyHeaders GateWayFilterFactory 删除重定向请求头过滤器
RemoveRequestHeader GateWayFilterFactory 删除请求头过滤器
RemoveResponseHeader GateWayFilterFactory 删除响应头过滤器
RewritePath GateWayFilterFactory 重写路径过滤器
SaveSession GateWayFilterFactory 保存session过滤器
SetPath GateWayFilterFactory 设置路径过滤器
SetStatus GateWayFilterFactory 设置状态过滤器
SetResponseHeader GateWayFilterFactory 设置响应头过滤器
Retry GateWayFilterFactory 重试过滤器
StripPrefix GateWayFilterFactory 忽略请求前缀过滤器
​ 官方文档对于这些过滤器的使用方式都已经做了说明,官方文档地址:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories

3 AddRequestParameter Filter 示例

1)修改网关服务的application.yml

spring:
  cloud:
    gateway:
      routes:
        - id: user-service #服务标识,不允许出现重复
          #uri: http://localhost:8001/ #实际服务访问路径
          uri: lb://user-service #动态路由
          predicates:
            - Path=/user/** #匹配方式
          filters: # 添加局部过滤器
            - AddRequestParameter=company,it   #company=it

2)修改UserController接收请求参数

@RequestMapping("/hello")
public String hello(String company){
    return "hello user service,company : "+company;
}

3)访问网关测试 http://localhost:8500/user/hello/

“hello user service,company : it”;

4 StripPrefix Filter

(1)问题呈现

我们之前用/user/**这样的映射路径代表user-service这个服务。因此请求user-service服务的一切路径要以/user/**开头

比如,访问:localhost:8500/user/2会被代理到:localhost:8081/user/2

现在,我们在user-service中的com.it.user.controller中定义一个新的接口:

package com.it.user.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("address")
public class AddressController {

    @GetMapping("me")
    public String myAddress() {
        return "我的地址";
    }
}

这个接口的路径是/address/me,并不是以/user/开头。当访问:localhost:8500/address/me时,并不符合映射路径,因此会得到404.

无论是 /user/**还是/address/**都是user-service中的一个controller路径,都不能作为网关到user-service的映射路径。

因此我们需要定义一个额外的映射路径,例如:/user-service,配置如下:

spring:
cloud:
gateway:
routes:
- id: user-service # 当前路由的唯一标识
uri: lb://user-service # 路由的目标微服务,user-service:代表服务id
predicates: # 断言
- Path=/user-api/** # 按照路径匹配的规则
那么问题来了:

当我们访问:http://localhost:8500/user-api/user/it时,映射路径/user-service指向用户服务,会被代理到:http://localhost:8081/user-api/user/it

当我们访问:http://localhost:8500/user-api/address/me时,映射路径/user-service指向用户服务,会被代理到:http://localhost:8081/user-api/address/me

这个/user-api是gateway中的映射路径,不应该被代理到微服务,怎办吧?

(2)去除路由前缀

解决思路很简单,当我们访问http://localhost:8500/user-api/user/1时,网关利用/user-api这个映射路径匹配到了用户微服务,请求代理时,只要把/user-api这个映射路径去除不就可以了吗。

恰好有一个过滤器:StripPrefixFilterFactory可以满足我们的需求。

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.3.RELEASE/reference/html/#the-stripprefix-gatewayfilter-factory

我们修改刚才的路由配置:

filters: # 过滤项

  • StripPrefix=1
    此时,网关做路由的代理时,就不会把/user-service作为目标请求路径的一部分了。

也就是说,我们访问:http://localhost:8500/user-api/user/it,会代理到:http://localhost:8081/user/it

我们访问:http://localhost:8500/user-api/address/me,会代理到:http://localhost:8081/address/me文章来源地址https://www.toymoban.com/news/detail-832108.html

到了这里,关于178 服务网关GateWay---局部过滤器(GatewayFilter)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Gateway网关 全局过滤器

    Gateway网关 全局过滤器

    一、全局过滤器 全局过滤器GlobalFilter 全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。 区别在于GatewayFilter通过配置定义,处理逻辑是固定的。 需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件: 参数中是否有au

    2024年02月07日
    浏览(12)
  • 网关Gateway过滤器的使用

    网关Gateway过滤器的使用

    前言: 最近在学习微服务相关的知识,看了黑马的相关课程,将关于Gateway过滤器的知识又总结了一些,希望能帮到各位小伙儿们以及加深下自己的印象🎊 如果文章有什么需要改进的地方还请大佬多多指教🥂 小威先感谢大家的支持了😁 Gateway网关的过滤器分为两种,一种是

    2023年04月09日
    浏览(8)
  • 网关 GateWay 的使用详解、路由、过滤器、跨域配置!

    网关 GateWay 的使用详解、路由、过滤器、跨域配置!

    SpringCloudGateway网关是所有微服务的统一入口。 1.1 它的主要作用是: 反向代理(请求的转发) 路由和负载均衡 身份认证和权限控制 对请求限流 1.2 相比于Zuul的优势: SpringCloudGateway基于Spring5中提供的WebFlux,是一种响应式编程的实现,性能更加优越。 Zuul的实现方式比较老式

    2024年02月07日
    浏览(39)
  • 网关 GateWay 的使用详解、路由、过滤器、跨域配置

    网关 GateWay 的使用详解、路由、过滤器、跨域配置

    SpringCloudGateway网关是所有微服务的统一入口。 1.1 它的主要作用是: 反向代理(请求的转发) 路由和负载均衡 身份认证和权限控制 对请求限流 1.2 相比于Zuul的优势: SpringCloudGateway基于Spring5中提供的WebFlux,是一种响应式编程的实现,性能更加优越。 Zuul的实现方式比较老式

    2024年02月14日
    浏览(37)
  • JAVA开发(通过网关gateway过滤器进行返回结果加密)

    JAVA开发(通过网关gateway过滤器进行返回结果加密)

    在对C的网站或者APP后端接口中,参数的传输往往需要加密传输。这时我们 可以通过springcloud的网关过滤器进行统一的控制。 网关过滤器的执行顺序: 请求进入网关会碰到三类过滤器:当前路由过滤器、DefaultFilter、GlobalFilter。 请求路由后,会将当前路由过滤器和DefaultFilter、

    2023年04月17日
    浏览(8)
  • 【Spring Cloud】深入探索统一网关 Gateway 的搭建,断言工厂,过滤器工厂,全局过滤器以及跨域问题

    【Spring Cloud】深入探索统一网关 Gateway 的搭建,断言工厂,过滤器工厂,全局过滤器以及跨域问题

    在微服务架构中,网关是至关重要的组件,具有多重职责,为整个系统提供了一系列关键功能。从下面的微服务结构图中,我们可以明确网关的几项主要作用: 微服务结构图: 请求过滤与安全: 用户的所有请求首先经过网关,这使得网关成为系统的第一道防线。通过对传入

    2024年02月07日
    浏览(9)
  • GateWay网关自定义过滤器实现token校验完成统一鉴权

    GateWay网关自定义过滤器实现token校验完成统一鉴权

    gateWay---API网关,也可以称为业务网关,主要服务于微服务的; (1)  三大组件 路由(Route)         构建网关的基本模块,由id(唯一标示)、目标URI、一组断言、一组过滤器组成,如果断言为true,则匹配该路由   断言(Predicate)          可以使用它匹配来自HTTP请求的任何

    2024年02月08日
    浏览(12)
  • SpringCloud GateWay 在全局过滤器中注入OpenFeign网关后无法启动

    SpringCloud GateWay 在全局过滤器中注入OpenFeign网关后无法启动

    目录 一、问题 二、原因 1、修改配置 2、添加@Lazy注解在client上面  3、启动成功 当在gateway的全局过滤器GlobalFilter中注入OpenFeign接口的时候会一直卡在路由中,但是不会进一步,导致启动未成功也未报错失败 在gateway网关中不能使用openfeign同步调用 三、解决方法 在注入的Aut

    2024年01月19日
    浏览(11)
  • SpringCloud - Spring Cloud 之 Gateway网关,Route路由,Predicate 谓词/断言,Filter 过滤器(十三)

    SpringCloud - Spring Cloud 之 Gateway网关,Route路由,Predicate 谓词/断言,Filter 过滤器(十三)

    阅读本文前可先参考 ​​​​​​SpringCloud - Spring Cloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客 SpringCloud - Spring Cloud 之 Gateway网关(十三)_MinggeQingchun的博客-CSDN博客 Web 有三大组件(监听器 过滤器 servlet),Spring Cloud GateWay 最主要的功能就是路由转发,而在定义

    2024年02月14日
    浏览(9)
  • 【微服务技术二】Feign、Gateway(路由、过滤器、跨域)的初步认知

    【微服务技术二】Feign、Gateway(路由、过滤器、跨域)的初步认知

    之前远程调用使用RestTemplate,代码如下: 使用RestTemplate的缺陷: 代码可读性差,编程体验不统一(莫名的url路径) 参数复杂时的URL难以维护 Feign是一个声明式的http客户端,官方网址: https://github.com/OpenFeign/feign Feign替代RestTemplate 使用Feign的步骤: 1、引入依赖: 2、在消费者

    2024年02月12日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包