SpringCloud GateWay-Filter学习

这篇具有很好参考价值的文章主要介绍了SpringCloud GateWay-Filter学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

3 Filter/过滤器

  • 路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应
  • Spring Cloud Gateway 内置了多种路由过滤器,他们都由GatewayFilter的工厂类来产生

1 GatewayFilter 使用 – 路由过滤器

  • 开发直接使用 GatewayFilter 较少,一般是自定义过滤器

第一步、修改e-commerce-gateway-20000 中的 application.yml

spring:
    cloud:
        gateway:
            routes: #配置路由,可以有多个路由配置
                    - id: member_routh01 #路由的ID,程序员自己写,要求唯一
                      #gateway 最终访问的 url = uri+Path
                      #匹配后提供服务的路由地址,也可以是外网 uri,比如 http://www.baidu.com 等
                      #比如: 客户端/浏览器请求 url http://localhost:10000/member/get/1
                      #如果根据Path匹配成功 最终访问的url/转发url 就是 url=http://localhost:10000/member/get/1
                      #如果匹配失败,则有gateway返回404信息
                      #uri: http://localhost:10000
                      #1. lb:协议名,member-service-provider 注册到eureka server 服务名(小写)
                      #2. 默认情况下,负载均衡算法是轮询
                      uri: lb://member-service-provider
                       filters:
                        #过滤器工厂会在匹配的请求头加上一对请求头,名称为 color 值为 blue
                        - AddRequestParameter=color, green 
  						#过滤器工厂会在匹配的请求头加上一对请求头,名称为 age 值为 20
                        - AddRequestParameter=age, 20 

第二步、验证、修改member-service-provider-10000/…/MemberController.java

//查询的方法/接口
@GetMapping("/member/get/{id}")
public Result<Member> queryMemberById(@PathVariable("id") Long id, HttpServletRequest request) {
        //路由过滤器
        String color = request.getParameter("color");
        String age = request.getParameter("age");

        //模拟超时,这里暂停 5 秒
        //try {
        //    TimeUnit.SECONDS.sleep(5);
        //} catch (InterruptedException e) {
        //    e.printStackTrace();
        //}

        Member member = memberService.queryMemberById(id);
        log.info("member={}", member);

        if (member != null) {
//            return Result.success("查询会员成功 member-service-provider-10000 " + color + age, member);
            return Result.success("查询会员成功 member-service-provider-10000", member);
        } else {
            return Result.error("402", "ID=" + id + "不存在");
        }
    
}

第三步、测试成功

SpringCloud GateWay-Filter学习

2 GatewayFilter 使用 – 自定义过滤器

  1. 自定义全局 GlobalFilter 过滤器
  2. 如果请求参数 user=xjz , pwd=123 则放行, 否则不能通过验证

第一步、在e-commerce-gateway-20000 创建 filter/CustomGateWayFilter.java

package com.xjz.springcloud.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
//自定义 GlobalFilter
@Component
public class CustomGateWayFilter implements GlobalFilter, Ordered {

    //filter是核心的方法,将我们过滤的业务,写在该方法中
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("==========CustomGateWayFilter=========");
        //先获取到对应的参数值
        //比如 http://localhost:20000/member/get/1?user=xjz&pwd=123
        String user = exchange.getRequest().getQueryParams().getFirst("user");
        String pwd = exchange.getRequest().getQueryParams().getFirst("pwd");
        if (!("xjz".equals(user) && "123".equals(pwd))){
            System.out.println("-----非法用户------");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);//回应
            return exchange.getResponse().setComplete();
        }
        //验证通过,放行
        return chain.filter(exchange);
    }

    /**
     * order:表示该过滤器执行的顺序,数字越小,优先级越高
     * @return
     */
    @Override
    public int getOrder() {
        return 0;
    }
}

第二步、测试结果

验证通过结果如下:

SpringCloud GateWay-Filter学习

验证失败结果如下:

SpringCloud GateWay-Filter学习文章来源地址https://www.toymoban.com/news/detail-472855.html

到了这里,关于SpringCloud GateWay-Filter学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SpringCloud GateWay自定义过滤器之GatewayFilter和AbstractGatewayFactory

    GatewayFilter 是一个简单的接口,用于定义网关过滤器的行为。一个网关过滤器就是一个实现了 GatewayFilter 接口的类,它可以执行在请求进入网关或响应离开网关时的某些操作。过滤器可以用于修改请求或响应,记录日志,添加头部信息,等等。 一个简单的自定义网关过滤器

    2024年02月01日
    浏览(49)
  • springcloud3 GateWay章节-Nacos+gateway(跨域,filter过滤等5

    1.验证制定请求,是否可以通过。 1.4.1 异常定义 1.异常配置类 2.异常响应类 1.4.2 测试 1.将调用的微服务都关闭,只保留网关服务。 http://localhost:7004/payment/nacos/222  

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

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

    2024年01月19日
    浏览(43)
  • 【Java】SpringCloud Gateway自定义过滤器中获取ServerHttpRequest的body中的数据为NULL的问题

    这个情况出现在,我需要进行验证码的校验,因此用户的请求首先需要被验证码过滤器校验,而验证码过滤器不需要设定为全局过滤器,因此我就单纯的把它设定为了一个局部过滤器,代码如下 然后我进行请求的时候,json参数如下 然后请求经过解析后会发现,字符串居然是

    2024年02月09日
    浏览(51)
  • Filter 过滤器

    Filter过滤器介绍 这里我们讲解Filter的执行流程,从下图可以大致了解到,当客户端发送请求的时候,会经过过滤器,然后才能到我们的servlet,当我们的servlet处理完请求之后,我们的response还是先经过过滤器才能到达我们的客户端,这里我们进行一个代码的演示,看看具体执

    2024年02月02日
    浏览(45)
  • 认识Filter(过滤器)

    Filter介绍 在计算机编程中,Filter(过滤器)是一种用于对数据流进行处理的软件组件。Filter 的作用是从输入流中获取数据,对其进行处理后再将其写入输出流中。Filter 组件通常用于数据校验、数据转换、数据压缩等方面,以及对网络通信进行处理。在 Web 开发中,Filter 是

    2024年02月02日
    浏览(46)
  • 过滤器Filter

    什么是Filter? Filter表示过滤器,是JavaWeb三大组件(Servlet、FIlter、Listener)之一。 过滤器可以把对资源的请求拦截下来,总而实现一些特殊的功能 使用过滤器后,要想访问web服务器上的资源,必须先经过过滤器,过滤器处理完毕后,才可以访问对应的资源。 过滤器一般完成

    2023年04月12日
    浏览(38)
  • [Java]过滤器(Filter)

    一、什么是过滤器 过滤器是Servlet的高级特性之一,是实现Filter接口的Java类! 过滤器的执行流程:   从上面的图我们可以发现,当浏览器发送请求给服务器的时候, 先执行过滤器,然后才访问Web的资源。服务器响应Response,从Web资源抵达浏览器之前,也会途径过滤器。 过滤

    2024年02月11日
    浏览(42)
  • java过滤器(Filter)

    原文链接: java过滤器(Filter – 编程屋 目录 1 过滤器简介 2 Filter详细介绍 3 Filter的用法 3.1 用法1  3.2 用法2 filter也称之为过滤器,它是javaWeb三大组件之一(Servlet程序、Listener监听器、Filter过滤器) 作用: 既可以对请求进行拦截,也可以对响应进行处理。 常见场景: 权限检

    2024年02月20日
    浏览(40)
  • JavaWeb 中 Filter过滤器

    @ 目录 Filter过滤器 每博一文案 1. Filter 过滤器的概述 2. Filter 过滤器的编写 3. Filter 过滤器的执行过程解析 3.1 Filter 过滤结合 Servlet 的使用 4. Filter 过滤器的拦截路径: 4.1 精确匹配路径 4.2 目录匹配 4.3 前后缀名路径匹配 4.4 所有路径匹配 5. 设置 Filter 执行顺序 6. Filter 过滤器中

    2024年02月03日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包