`

spring cloud gateway 全局过滤器。

    博客分类:
  • J2EE
 
阅读更多

  

 

spring cloud gateway 网关yaml配置

 

 

 

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true   #从注册中心寻找
      routes:
        - id: hystrix_route
          uri: lb://web-service   #web微服务
          predicates:
            - Path=/api/web/**    #访问微服务的路径
          filters:
            - StripPrefix=2       #去除两个前缀目录

eureka:
  client:
    service-url:
      defaultZone: http://root123:root123@127.0.0.1:8761/eureka
    registry-fetch-interval-seconds: 5
  instance:
    instance-id: ${spring.application.name}:${server.port}
    prefer-ip-address: true  #当你获取host时,返回的不是主机名,而是ip
    ip-address: 127.0.0.1




 

 

 

 

过滤器配置。

 

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.fansxnet.common.R;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * 
 */
@Slf4j
@Configuration
public class GlobalFiltersConfig {

    @Component
    public class AuthFilter implements GlobalFilter, Ordered {
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            ServerHttpRequest request = exchange.getRequest();
            String token = request.getHeaders().getFirst("token");
            if (StringUtils.isEmpty(token)) {
                //验证失败,提示登录
                exchange.getResponse().getHeaders().add("Content-Type", "application/json;charset=UTF-8");
                return exchange.getResponse().writeAndFlushWith(Mono.just(Mono.just(exchange.getResponse().bufferFactory().wrap(JSON.toJSONBytes(R.just(-2, "请登录"))))));
            }
            log.info("header: \n{}\n", JSON.toJSONString(request.getHeaders(), SerializerFeature.PrettyFormat));
            //继续
            return chain.filter(exchange).
                    then(Mono.fromRunnable(() ->
                    {
                        log.info("third post filter");
                    }));
        }

        /**
         NettyWriteResponseFilter过滤器前面,
         */
        @Override
        public int getOrder() {
            return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER-1;
        }
    }
}

 

 

 

 

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.0.3.RELEASE/single/spring-cloud-gateway.html

https://github.com/xiaofancn/spring-cloud-learn

 

分享到:
评论

相关推荐

    springcloud gateway 全局过滤器统一签名判定.doc

    在Spring Cloud Gateway中,全局过滤器(Global Filter)是一种强大的机制,用于在请求路由到具体的服务之前或之后执行通用的处理逻辑。在这个场景中,我们关注的是如何利用全局过滤器来实现统一的签名验证,这在...

    springcloud getaway 全局过滤器.doc

    总结来说,自定义Spring Cloud Gateway全局过滤器是通过实现`GlobalFilter`接口并配置到Spring容器中完成的。这些过滤器可以用来实现诸如认证、限流、日志记录等跨路由的功能。同时,Eureka作为服务注册与发现的工具...

    Spring Cloud Gateway的全局异常处理

    Spring Cloud Gateway作为一款基于Spring Framework 5、Project Reactor和Spring Boot 2.0构建的云原生网关框架,它提供了强大的路由转发能力和灵活的过滤器模型,能够很好地满足微服务网关的各种需求。然而,在实际...

    springcloud Gateway网关-压测用.zip

    自定义全局过滤器是SpringCloud Gateway的一个强大特性,允许我们注册自己的过滤器来处理所有路由的请求或响应。这种能力对于数据格式转换、API版本控制或者在服务间添加通用的请求头非常有用。 至于性能测试,...

    spring cloud gateway 例子

    可能会讨论全局过滤器和路由级过滤器的区别。 4. **服务发现**:在云原生环境中,服务通常通过服务发现组件(如Eureka或Consul)注册和发现。例子可能展示如何配置Gateway使用这些服务发现机制。 5. **实战演示**:...

    spring cloud gateway 全局过滤器的实现

    全局过滤器的实现基于 `GlobalFilter` 接口,该接口定义在 `org.springframework.cloud.gateway.filter` 包中。它只有一个方法 `filter(ServerWebExchange exchange, GatewayFilterChain chain)`,此方法会在每个...

    SpringCloudGateway2.1使用手册中文版.rar

    在使用 SpringCloudGateway2.1 使用手册中文版时,你可以找到关于如何配置路由、使用过滤器、集成服务发现、安全设置等方面的详细指导。手册中应该会包含以下内容: 1. **快速入门**:介绍如何创建基本的 Spring ...

    详解SpringCloud Gateway之过滤器GatewayFilter

    GlobalFilter是SpringCloud Gateway的全局过滤器接口,提供了对所有请求的过滤功能,通常用于认证、授权、日志记录等功能。 在SpringCloud Gateway的请求处理流程中,GatewayFilterChain将请求交给过滤器链表进行...

    Spring Cloud Gateway全局通用异常处理的实现

    总结来说,Spring Cloud Gateway全局异常处理的实现是通过自定义`ErrorWebExceptionHandler`来完成的,它允许我们控制异常的处理方式,确保在各种异常情况下都能返回统一格式的响应。这对于提升系统的稳定性和用户...

    spring cloud gateway跨域实现

    2. **自定义全局过滤器**: Spring Cloud Gateway允许通过实现`GlobalFilter`接口来自定义过滤器,进行请求处理。例如,可以创建一个名为`loginFilter`的过滤器,用于记录日志、验证访问权限等操作。在这个过滤器中...

    SpringCloud.03.网关Gateway 配置文件

    在Spring Cloud生态体系中,Spring Cloud Gateway作为新一代的API网关,被广泛应用于微服务架构中,用于统一处理请求路由、过滤器链、限流、熔断等核心功能。本篇将详细介绍Spring Cloud Gateway的配置文件相关知识...

    springcloud zuul gateway 服务网关

    SpringCloud Zuul Gateway 服务网关是Spring Cloud生态系统中的一个重要组件,它主要负责微服务架构中的路由转发和过滤器功能。Zuul是Netflix开源的一个边缘服务,而Gateway则是Spring Cloud针对Zuul进行的升级版,...

    Spring Cloud alibaba 集成 Spring Cloud Gateway

    过滤器分为全局过滤器和路由过滤器,它们可以按照需求灵活组合使用。 5. **集成 Sentinel**:为了实现限流和降级,可以集成 Spring Cloud Alibaba 的 Sentinel 模块。Sentinel 提供了丰富的流量控制策略,如固定...

    springcloudgateway笔记代码.rar

    2. **过滤器**:SpringCloudGateway支持自定义过滤器,过滤器分为全局过滤器和路由级过滤器。全局过滤器对所有路由生效,而路由级过滤器只对特定路由生效。过滤器可以用于实现请求的预处理和后处理,如添加Header、...

    SpringCloud Gateway应用案例

    过滤器分为全局过滤器和路由过滤器,前者对所有路由生效,后者只对特定路由生效。例如,`AddRequestHeader`过滤器可以在每个请求中添加自定义头部: ```java @Component public class AddHeaderGlobalFilter ...

    (八)SpringCloud-Gateway(局部过滤器&全局过滤器)本章代码

    (八)SpringCloud-Gateway(局部过滤器&全局过滤器)本章代码

    SpringBoot+SpringCloud+nacos+gateway+mybatis搭建微服务

    同时,通过Spring Cloud Gateway设置路由规则和过滤器,实现动态路由、熔断、限流等功能,增强系统的健壮性。 总的来说,这个项目旨在利用Spring Boot的便利性,结合Spring Cloud的分布式能力,借助Nacos实现服务...

    SpringCloud项目源码下载.docx

    Spring Cloud 是一个基于Spring Boot实现的云应用开发工具包,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)中...

    spring-cloud-gateway-example-master.zip

    - **过滤器(Filter)**:过滤器用于处理请求和响应,如添加请求头、限流、熔断等,分为全局过滤器和路由过滤器。 4. **路由配置** 在`application.yml`中,我们可以通过`spring.cloud.gateway.routes`配置路由规则...

    springCloud路由网管负载均衡及拦截过滤的简单实现.

    全局过滤器对所有路由生效,而路由过滤器只对特定路由生效。 1. 全局过滤器 全局过滤器在`GlobalFilter`接口中实现,例如实现日志记录: ```java @Component public class LoggingFilter implements ...

Global site tag (gtag.js) - Google Analytics