springcloud——gateway的断言与过滤器

本文介绍了SpringCloud Gateway中断言和过滤器的概念。断言用于定义路由转发的条件,只有当满足所有断言条件时,请求才会被转发。过滤器则类似于断言,也参与路由决策,同时还能进行额外的操作如修改请求或响应。文章详细阐述了这两种机制在SpringCloud Gateway中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、断言

断言的作用:每一个Predicate的使用,你可以理解为:当满足这种条件后才会被转发,如果是多个,那就是都满足的情况下被转发。
参照官网有多种断言,如下图:
在这里插入图片描述

2、过滤器

过滤器的作用与断言相似

package com.springcloud.filter;

import lombok.extern.slf4j.Slf4j;
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;

import java.util.Date;

/**
 * @author dc
 * @date 2020/8/3 - 16:28
 */
@Component
@Slf4j
//自定义过滤器必须实现GlobalFilter、Ordered这两个接口
//断言、过滤器的作用都是定义一个规范,满足该规范的请求才能不被过滤
public class MyGateWayFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        log.info("*******come in MyGateWayFilter: " + new Date());

        String uname = exchange.getRequest().getQueryParams().getFirst("uname");

        if (uname == null) {
            log.info("****** 用户名为空,非法用户!!!");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }

        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return 0;
    }
}
### Spring Cloud Gateway 使用教程 #### 一、Spring Cloud Gateway 简介 Spring Cloud Gateway 是新一代 API 网关,它基于 Spring Framework 5, Project Reactor Spring Boot 2.0 构建。Gateway 提供了多种路由断言工厂过滤器工厂,使得开发者可以轻松实现复杂的路由规则以及对 HTTP 请求的预处理后处理操作[^3]。 #### 二、环境准备安装 要开始使用 Spring Cloud Gateway 需要在项目中加入相应的 Maven 或 Gradle 依赖项,并确保所使用的 Spring Boot 版本其兼容。对于初学者来说,在引入这些依赖时要注意避免版本之间的不匹配或者潜在的依赖冲突问题[^1]。 #### 三、配置方式介绍 该工具支持两种主要的方式来进行路由其他功能性的设置——即通过 Java 编码形式完成或是利用 YAML 文件声明式地定义所需参数。其中后者更为直观易懂,适合大多数应用场景下的快速开发需求;而对于一些复杂逻辑,则可能更倾向于采用前者以获得更大的灵活性[^2]。 ```yaml spring: cloud: gateway: routes: - id: example_route uri: http://example.org predicates: - Path=/example/** ``` #### 四、跨域资源共享(CORS) 处理 当涉及到前后端分离架构下不同域名间的交互时,CORS 成为了一个重要话题。由于浏览器的安全机制,默认情况下不允许来自其他源的数据访问当前文档对象模型 (DOM),这便阻碍了许多合法的服务调用。因此,在构建微服务体系结构的过程中合理配置 CORS 设置至关重要。可以通过自定义 `CorsConfiguration` 来允许特定来源的请求,从而满足业务场景中的实际需要[^5]。 #### 五、集成安全性框架-Spring Security 考虑到现代 Web 应用程序往往离不开身份验证授权的支持,所以如何将两者结合起来成为了不可忽视的一环。值得注意的是,在默认情况下,Gateway 中用于处理跨域请求的 CorsWebFilter 将会在整个应用程序级别的 Filter Chain 执行完毕之后才被触发,这意味着如果想要先于任何安全措施之前应用 CORS 政策的话就需要特别调整其顺序[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值