首页 > 其他分享 >路由过滤器GatewayFilter

路由过滤器GatewayFilter

时间:2023-06-21 19:56:19浏览次数:38  
标签:GatewayFilter springframework org 过滤器 import 路由 请求

GatewayFilter:是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

 

过滤器工厂 GatewayFilterFactory,Spring提供了31种不同的路由过滤器工厂。

例:给所有进入userservice的请求添加一个请求头:Truth=itcast is freaking awesome!

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
    gateway:
      routes:
        - id: user-service    #路由标记,必须唯一
          uri: lb://userservice     #路由目标地址 lb:loadBalance
          predicates :    #判断请求是否符合规则
            - Path=/user/**     #路由断言,判断路径是否是以user开头,如果是则符合
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
#            - After=2037-01-20T17:42:47.789-07:00[Asia/Shanghai]     #时间必须在2037年之后
          filters: #过滤器
            -  AddRequestHeader=Truth, Itcast is freaking awesome! # 添加请求头

 

默认过滤器:

default-filters:   # 默认过滤器,会对所有的路由请求都生效

  - AddRequestHeader=Truth, Itcast is freaking awesome!   # 添加请求头

 

全局过滤器GlobalFilter:

  全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。 区别在于GatewayFilter通过配置定义,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。

  定义方式是实现GlobalFilter接口。

需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:

  1、参数中是否有authorization,

  2、authorization参数值是否为admin

如果同时满足则放行,否则拦截

package cn.itcast.gateway;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

//@Order(-1)        //过滤器的优先级,执行顺序,越小优先级越高
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        //1、获取请求参数
        ServerHttpRequest request = exchange.getRequest();
        MultiValueMap<String, String> params = request.getQueryParams();
        //2、获取参数中的authorization参数
        String auth = params.getFirst("authorization");
        //3、判断参数是否等于admin
        if(auth.equals("admin")){
            //4、是则放行
            return chain.filter(exchange);

        }
        //5、否,拦截
        //5.1、设置状态码
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        //5.2、拦截请求
        return exchange.getResponse().setComplete();
    }

    //设置优先级
    @Override
    public int getOrder() {
        return -1;
    }
}

全局过滤器的作用是什么?

对所有路由都生效的过滤器,并且可以自定义处理逻辑

实现全局过滤器的步骤?

实现GlobalFilter接口

添加@Order注解或实现Ordered接口

编写处理逻辑

标签:GatewayFilter,springframework,org,过滤器,import,路由,请求
From: https://www.cnblogs.com/fxzm/p/17496955.html

相关文章

  • 过滤器执行顺序
    请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GlobalFilter请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器           每一个过滤器都必须指定一个int类型的order值,order......
  • 路由断言工厂Route Predicate Factory
    网关路由可以配置的内容包括:1、路由id:路由唯一标示2、uri:路由目的地,支持lb和http两种3、predicates:路由断言,判断请求是否符合要求,符合则转发到路由目的地4、filters:路由过滤器,处理请求或响应 在配置文件中写的断言规则只是字符串,这些字符串会被PredicateFactory读取并处理......
  • 企业级路由器架构简析
    硬件CPU多采用aarch64(就是arm64)、mips64。没见过x86,只有杂牌多使用x86.,MARVELL双核RAMDROMROMSDROM型号以类型简称,比如RG-NBR6205-E,型号就是nbr6200-e,属于一种类型 系统操作系统使用openwrt、centos定制系统,锐捷系统RGOS10.x11.x,h3c是comwarev5v7,简称CMW,com是指3com......
  • 家用路由器推荐
    硬路由性价比之王k2p硬路由低价推荐ac9硬改机newifi3(无线功能很弱)磊克腾达硬路由高价推荐非三兴内存版本k3ac68u 网件领势硬路由BIOS推荐 breed,硬路由系统推荐openwrt(原生支持、lean、潘多拉等等改版固件)、俄罗斯的pavanda(原生支持、或改版固件)、tomato、DDWRT、潘多......
  • 企业级路由器与电脑互传文件的思路和方法
      一般企业级路由器都带有强大的网络管理功能、内置强大的系统软件和应用软件,企业级路由器内部flash上有个文件系统该文件系统不对外开放,不可直接管理,只是开放了一小部分文件夹作为可以直接管理的部分,里面存放着全局配置文件、日志文件、系统镜像文件、证书、诊断文件、版权......
  • find-my-way nodejs 快速的http 路由框架
    find-my-way基于了radixtree开发的路由框架,支持路由参数,通配符,同时语言无关fastify以及restify都使用了路由框架,同时也受echo启发说明了解find-my-way的使用以及内部机制对于学习fastify是比较有用的,fastify不少有意思的插件机制都利用了find-my-way参考资料https://g......
  • 聊聊布隆过滤器
    聊聊布隆过滤器前言布隆过滤器作为一个精巧且实用的数据结构,对于后端程序员来讲,学习和理解布隆过滤器有很大的必要性。希望通过这篇文章让更多人了解布隆过滤器的原理,并且会实际去使用它!什么是布隆过滤器?布隆过滤器(BloomFilter)是由BurtonHowardBloom于1970年提出,我......
  • uni-app微信小程序路由传参数据截断问题解决
    跳转页面:因为数据接受页面是富文本编辑器接收,所以先是将数据双引号处理了。数据太多太长,跳转页面只要用encodeURIComponent()函数将其数据处理后传过去constdetails=this.oneform.text.replace(/"/g,'\'')this.$tab.navigateTo(`/pages/common/editor/editor?details=${e......
  • SpringMVC中接收前端传递的参数,设置了编码过滤器filter,但在控制台中还是出现乱码问题
    SpringMVC中接收前端传递的参数,设置了编码过滤器filter,但在控制台中还是出现乱码问题。 在SpringMVC中遇到乱码问题不要慌,先配个SpringMVC的自带编码过滤器试试 <filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.spr......
  • 浅析布隆过滤器
    最后更新时间2021-10-05.布隆过滤器(BloomFilter)是1970年由布隆提出的。它可以检索一个元素是否存在于集合中。它的优点是空间效率高,查询时间极快,缺点是有一定的误判率,而且删除困难。1.背景编程中,经常会有判断一个元素是否存在一个集合中:网络爬虫程序:判断一个地址......