SpringCloud中网关-详解、案例(代码)

简介:在Spring Cloud中,网关的角色是非常重要的,它负责整个系统的入口流量,并且可以处理路由、过滤、协议转换等操作

目录

1、网关的技术实现

1.1 网关功能

1.2 网关的形式

2、网关实现步骤

2.1 添加相关依赖

2.2 创建此module的main()方法,用来启动此服务

3、路由过滤器

3.1 路由断言工厂

4.1 路由过滤工厂

4.2 全局过滤器

4.3 跨域问题处理

4、总结


1、网关的技术实现

1.1 网关功能

图 1.1-1 网关功能

上图中展示的便是网关的作用:

  • 身份认证和权限校验:对不同的登录用户校验身份,确定有那些访问权限
  • 服务路由、负载均衡:确定登录的用户访问那些服务,从而调用空闲的服务
  • 请求限流:当访问量过多,就限制用户登录或者让用户等待

1.2 网关的形式

图 1.2-1 网关的两种形式

2、网关实现步骤

2.1 添加相关依赖

图 2.1-1 添加相关依赖

上图中展示的是搭建网关的第一步:

  • 在项目中创建一个新的模块
  • 在新模块pom文件中添加依赖

2.2 创建此module的main()方法,用来启动此服务

图 2.2-1 创建此module的main()方法
上图中展示的是在当前项目中创建一个 gateway 模块而且创建此模块的main()方法,用来启动此服务

3、路由过滤器

3.1 路由断言工厂

图 3.1-1 路由断言工厂
  • 我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件
  • 例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的
  • 像这样的断言工厂在SpringCloudGateway还有十几个

4.1 路由过滤工厂

图 4.1-1 路由过滤工厂

上图中展示的便是路由过滤工厂的常见过滤器

4.2 全局过滤器

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.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * 全局过滤器
 */
public class AuthorizeFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 1.获取请求
        ServerHttpRequest request = exchange.getRequest();
        MultiValueMap<String, String> map = request.getQueryParams();
        // 2.获取authorization参数
        String authorizeFilter = map.getFirst("authorizeFilter");
        // 3.校验
        if ("admin".equals(authorizeFilter)){
            // 4.校验成功,放行
            Mono<Void> mono = chain.filter(exchange);
            return mono;
        }
        // 5.校验失败,结束处理
        exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
        return exchange.getResponse().setComplete();

    }

    // 设置全局过滤器的执行顺序,数字越小越先执行
    @Override
    public int getOrder() {
        return -1;
    }
}

4.3 跨域问题处理

图 4.3-1 跨域问题处理
上图展示的便是处理跨域问题的方法,即在网关微服务的配置文件中,添加如上对应配置(参数要根据开发情况做出调整)

4、总结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值