Fork me on Github

Gateway网关

一、搭建网关服务

1.创建新的moudle,引入SpringCloudGateway的依赖和nacos的服务发现依赖

复制代码
 1         <!--nacos服务发现依赖-->
 2         <dependency>
 3             <groupId>com.alibaba.cloud</groupId>
 4             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 5         </dependency>
 6         <!--网关依赖-->
 7         <dependency>
 8             <groupId>org.springframework.cloud</groupId>
 9             <artifactId>spring-cloud-starter-gateway</artifactId>
10         </dependency>
复制代码

 

2.编写路由配置及nacos地址

复制代码
 1 server:
 2   port: 10010  # 网关端口
 3 spring:
 4   application:
 5     name: gateway  # 服务名称
 6   cloud:
 7     nacos:
 8       server-addr: localhost:8848  # nacos地址
 9     gateway:
10       routes:  #网关路由配置
11         - id: user-service  # 路由标识,自定义,唯一即可
12           uri: lb://userservice  # 路由的目标地址,lb就是负载均衡,后面跟服务名称
13           predicates:  # 路由断言,判断请求是否符合规律的条件
14             - Path=/user/**  # 按照路径匹配,只要以/user/开头就符合要求
15         - id: order-service
16           uri: lb://orderservice
17           predicates:
18             - Path=/order/**
复制代码

 

二、过滤器工厂

1.过滤器

给所有进入userservice的请求添加一个请求头

复制代码
spring:
  application:
    name: gateway  # 服务名称
  cloud:
    nacos:
      server-addr: localhost:8848  # nacos地址
    gateway:
      routes:  #网关路由配置
        - id: user-service  # 路由标识,自定义,唯一即可
          uri: lb://userservice  # 路由的目标地址,lb就是负载均衡,后面跟服务名称
          predicates:  # 路由断言,判断请求是否符合规律的条件
            - Path=/user/**  # 按照路径匹配,只要以/user/开头就符合要求
          filters:
              - AddRequestHeader=Truth,Itcast is freaking awesome!  # 添加请求头
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
复制代码

 

2.默认过滤器

如果要对所偶的路由都生效,则可以将过滤器工厂写到default下

复制代码
 1 spring:
 2   application:
 3     name: gateway  # 服务名称
 4   cloud:
 5     nacos:
 6       server-addr: localhost:8848  # nacos地址
 7     gateway:
 8       routes:  #网关路由配置
 9         - id: user-service  # 路由标识,自定义,唯一即可
10           uri: lb://userservice  # 路由的目标地址,lb就是负载均衡,后面跟服务名称
11           predicates:  # 路由断言,判断请求是否符合规律的条件
12             - Path=/user/**  # 按照路径匹配,只要以/user/开头就符合要求
13         - id: order-service
14           uri: lb://orderservice
15           predicates:
16             - Path=/order/**
17           default-filters:
18               - AddRequestHeader=Truth,Itcast is freaking awesome!  # 添加请求头
复制代码

 

三、全局过滤器 GlobalFilter

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样

区别:GatewayFilter通过配置定义,处理逻辑是固定的,而GlobalFilter的逻辑需要在自己写代码实现,定义方式是实现GlobalFilter接口

步骤:自定义类,实现GlobalFilter接口,添加@Order注解或实现Ordered接口

复制代码
 1 @Component
 2 //@Order(-1)
 3 public class AuthorizeFilter implements GlobalFilter , Ordered {
 4     @Override
 5     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
 6         //1.获取请求参数
 7         ServerHttpRequest request = exchange.getRequest();
 8         MultiValueMap<String, String> params = request.getQueryParams();
 9         //  2.获取请求中的authorization参数
10         String auto = params.getFirst("authorization");
11         //  3.判断参数是否等于admin:
12         //    是,放行
13         if("admin".equals(auto)) {
14             return chain.filter(exchange);
15         }
16         //    否,拦截
17         //设置状态码
18         exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
19         return exchange.getResponse().setComplete();
20     }
21 
22     @Override
23     public int getOrder() {
24         return -1;
25     }
26 }
复制代码

 

posted @   菜鸟昂  阅读(144)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示