统一网关Gateway的使用:

打印 上一主题 下一主题

主题 951|帖子 951|积分 2853

为什么需要网关?

Gateway网关是我们服务的守门神,所有微服务的统一入口
网关的核心功能特性:

  • 网关的功能:身份认证和权限校验
  • 服务路由,负载均衡
  • 请求限流
在SpringCloud中网关的实现包括两种:

  • geteway
  • zuul

搭建网关服务

  • 创建新的module(模块),引入SpringCloudGateway的依赖和nacos的服务发现依赖:
  • 编写启动类 :
    1. package cn.itcast.gateway;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. @SpringBootApplication
    5. public class GatewayApplication {
    6.         public static void main(String[] args) {
    7.                 SpringApplication.run(GatewayApplication.class, args);
    8.         }
    9. }
    复制代码
  • 编写路由配置及nacos地址
搭建网关服务:
总结:
网关搭建步骤:

  • 创建项目,引入nacos服务发现和gateway依赖
  • 配置application.yml,包括服务基本信息、nacos地址、路由
路由配置包括:

  • 路由id:路由的唯一标示
  • 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
  • 路由断言(predicates):判断路由的规则,
  • 路由过滤器(filters):对请求或响应做处理
路由断言工厂:


路由过滤器 GatewayFilter:

还有一个配置  filters  :路由过滤器:对请求或响应做处理

会先经过过滤器          Spring提供了31种不同的过滤器工厂
默认过滤器   default-filters   会对所有的路由请求都生效

全局过滤器 GlobaFilter:


exchange   请求上下文 从请求进入开始一直到结束为止 可以拿到请求相关的信息,响应相关的信息 甚至 存东西和取东西也是可以的
chain        过滤器链 放行用的  交给下一个过滤器
自定义一个全局过滤器:

  • 参数中是否有token,
  • token参数值是否为admin
如果同时满足则放行,否则拦截
  1. @Component
  2. @Order(1)
  3. public class AuthorizeFilter implements GlobalFilter {
  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 auth = params.getFirst("token");
  11. //        3.判断参数值是否等于admin
  12.         if ("admin".equals(auth)) {
  13.             // 4.是 放行
  14.             return chain.filter(exchange);
  15.         }
  16. //        5.否 拦截
  17. //        设置状态码
  18.         exchange.getResponse().setStatusCode(
  19.                 HttpStatus.UNAUTHORIZED);
  20.         return exchange.getResponse().setComplete();
  21.     }
  22. }
复制代码

  • 全局过滤器的作用是什么:
    对所有路由都生效的过滤器,并且可以自定义处理逻辑
  • 实现全局过滤器的步骤:

    • 实现GlobalFilter接口
    • 添加@order注解或者实现Ordered接口  数值越小 优先级越高
    • 编写处理逻辑

过滤器执行顺序:


  • 当过滤器的order值一样,会按照defaultFilter > 路由过滤器 > GlobalFilter的顺序执行

跨域问题处理:

域的组成:协议,ip,端口

  • 同域:协议,ip,端口 都相同
  • 跨域:协议,ip,端口 有一个不同
网管跨域处理的方法 CORS方案  并且只需要简单的配置就能实现


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表