统一网关Gateway的使用:

为什么需要网关?

Gateway网关是我们服务的守门神,所有微服务的统一入口

网关的核心功能特性:

  • 网关的功能:身份认证和权限校验
  • 服务路由,负载均衡
  • 请求限流

在SpringCloud中网关的实现包括两种:

  • geteway
  • zuul

统一网关Gateway的使用:

搭建网关服务

  1. 创建新的module(模块),引入SpringCloudGateway的依赖和nacos的服务发现依赖:统一网关Gateway的使用:
  2. 编写启动类 :
package cn.itcast.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

统一网关Gateway的使用:

统一网关Gateway的使用:

总结:

网关搭建步骤:

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

路由配置包括:

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

路由断言工厂:

统一网关Gateway的使用:

路由过滤器 GatewayFilter:

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

统一网关Gateway的使用:

会先经过过滤器 Spring提供了31种不同的过滤器工厂

默认过滤器 default-filters 会对所有的路由请求都生效

统一网关Gateway的使用:

全局过滤器 GlobaFilter:

统一网关Gateway的使用:

exchange 请求上下文 从请求进入开始一直到结束为止 可以拿到请求相关的信息,响应相关的信息 甚至 存东西和取东西也是可以的

chain 过滤器链 放行用的 交给下一个过滤器

自定义一个全局过滤器:

  • 参数中是否有token,
  • token参数值是否为admin

如果同时满足则放行,否则拦截

@Component
@Order(1)
public class AuthorizeFilter implements GlobalFilter {

    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//        1.获取请求参数
        ServerHttpRequest request = exchange.getRequest();
        MultiValueMap params = request.getQueryParams();
//        2.获取参数中的authorization参数
        String auth = params.getFirst("token");

//        3.判断参数值是否等于admin
        if ("admin".equals(auth)) {
            // 4.是 放行
            return chain.filter(exchange);
        }

//        5.否 拦截
//        设置状态码
        exchange.getResponse().setStatusCode(
                HttpStatus.UNAUTHORIZED);
        return exchange.getResponse().setComplete();

    }
}
  • 全局过滤器的作用是什么: 对所有路由都生效的过滤器,并且可以自定义处理逻辑
  • 实现全局过滤器的步骤:
  • 实现GlobalFilter接口
  • 添加@order注解或者实现Ordered接口 数值越小 优先级越高
  • 编写处理逻辑

过滤器执行顺序:

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

统一网关Gateway的使用:

跨域问题处理:

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

  • 同域:协议,ip,端口 都相同
  • 跨域:协议,ip,端口 有一个不同

网管跨域处理的方法 CORS方案 并且只需要简单的配置就能实现

统一网关Gateway的使用:

Original: https://www.cnblogs.com/andanlife/p/16689478.html
Author: 黯淡钦凉
Title: 统一网关Gateway的使用:

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622595/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MyBatis架构与源码分析<资料收集>

    1、架构与源码分析 :https://www.cnblogs.com/luoxn28/p/6417892.html 、https://www.cnblogs.com/wangdai…

    Java 2023年5月30日
    059
  • 设计模式 — Prototype(原型模式)

    原型模式(Prototype) 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。 在软件系统中,经常面临着”某些结构复杂的对象”的创建工…

    Java 2023年6月16日
    081
  • JDK成长记10:Thread的基本原理和常见应用场景,你都知道么?

    相信你经过集合篇的成长,已经对JDK源码的学习轻车熟路了。接下来你将一起和我进入后半篇的学习。让我们开始吧! 在接下来10分钟,你将学习到thread 的源码原理、线程的状态变化、…

    Java 2023年6月5日
    082
  • 漏洞发现:代码分析引擎 CodeQL

    codeql 是一门类似 SQL 的查询语言,通过对源码(C/C++、C#、golang、java、JavaScript、typescript、python)进行完整编译,并在此过…

    Java 2023年6月7日
    0223
  • 2.Add Two Numbers——LeetCode

    You are given two non-empty linked lists representing two non-negative integers. The digit…

    Java 2023年6月15日
    090
  • GTID主从配置后的主库数据迁移到从库操作

    在不停止主库、主库不锁库的情况下进行数据库主从复制,主库的数据导入给从库,并且从库开启同步功能。 windows环境下mysql线上数据库需要做主从备份,线上的数据库已经开启bin…

    Java 2023年6月8日
    070
  • [学习笔记] Java正则表达式

    正则表达式 正则表达式定义了字符串的模式,可以用于搜索、编辑或处理文本; 正则表达式使用字符串描述规则,并用于匹配字符串; 一个正则表达式其实就是一个描述规则的字符串,被正则表达式…

    Java 2023年6月5日
    073
  • SpringBoot集成Thymeleaf发送Html邮件报错

    由于业务需求需要使用Thymeleaf作为模板发送Html邮件,开发调试过程中发生以下错误 开始以为是Classpath下不存在这个文件或者解析时候传入参数不对等等原因,排查了半天…

    Java 2023年6月13日
    073
  • HashSet源码分析

    HashSet是使用HashMap来实现的 总结 (1)由于在hashMap中key不可以重复所以HashSet中的元素不可重复。 (2)同理hashMap中允许key为null,…

    Java 2023年6月8日
    072
  • 来阿里一年后我迎来了第一次工作变动….

    你怎么不更新啦?怎么最近动态也变少啦?都去干吗了?工作很忙么? 算起来我也阶段性停更一年半了,这一年半不仅是在不断尝试自媒体不同的内容和方向,工作上的巨大转变也推着我去学习尝试了很…

    Java 2023年6月9日
    073
  • 混合配置

    不知大家可曾想过这样一些问题:”在基于XML或基于Java的显示配置中,假如需要配置的Bean很多,这时把所有Bean的配置信息全都填在一个配置文件里,难道不会导致配置…

    Java 2023年6月5日
    079
  • Java File I/O 操作

    一、实验Demo UTF_8格式读写文件节点 import java.io.*; import static java.nio.charset.StandardCharsets.U…

    Java 2023年5月29日
    092
  • 浅析js前端如何将word文档转为html:docx是怎样存储图片的、Java使用POI如何实现、前端使用Mammoth.js如何实现

    先聊聊需求背景:公司运营需求,说在富文本编辑器中发布包含图片的 Word 文档时,图片和文本内容不能一起复制,每次她们都得分开处理,对于包含较多图片的 Word 时,她们处理起来很…

    Java 2023年5月29日
    070
  • CentOS7-ElasticSearch的使用

    1.下载 ElasticSearch官方下载地址​www.elastic.co/cn/downloads/past-releases#elasticsearch 最好选择版本7.x…

    Java 2023年6月7日
    068
  • 从干将莫邪的故事说起–java比较操作注意要点

    故事背景 《搜神记》: 楚干将、莫邪为楚王作剑,三年乃成。王怒,欲杀之。剑有雌雄。其妻重身当产。夫语妻曰:”吾为王作剑,三年乃成。王怒,往必杀我。汝若生子是男,大,告之…

    Java 2023年5月29日
    050
  • 云图说丨DDoS防护解决方案:DDoS大流量攻击防得住

    摘要:华为云安全服务打造DDoS防护解决方案,助您防患于未然,筑牢业务安全防线。 本文分享自华为云社区《【云图说】第255期 DDoS防护解决方案:DDoS大流量攻击防得住》,作者…

    Java 2023年6月15日
    065
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球