微服务网关:

1、身份认证 和 权限校验

2、服务路由、负载均衡

3、请求限流

搭建服务网关:

网关是一个独立的服务,同样需要被注册中心注册到,这里依然使用的是Nacos

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>cloud-demo</artifactId>
  7. <groupId>cn.itcast.demo</groupId>
  8. <version>1.0</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11.  
  12. <artifactId>gateway</artifactId>
  13.  
  14. <properties>
  15. <maven.compiler.source>8</maven.compiler.source>
  16. <maven.compiler.target>8</maven.compiler.target>
  17. </properties>
  18.  
  19. <dependencies>
  20. <!--nacos服务注册发现依赖-->
  21. <dependency>
  22. <groupId>com.alibaba.cloud</groupId>
  23. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  24. </dependency>
  25. <!--网关gateway依赖-->
  26. <dependency>
  27. <groupId>org.springframework.cloud</groupId>
  28. <artifactId>spring-cloud-starter-gateway</artifactId>
  29. </dependency>
  30. </dependencies>
  31. <build>
  32. <finalName>app</finalName>
  33. <plugins>
  34. <plugin>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-maven-plugin</artifactId>
  37. </plugin>
  38. </plugins>
  39. </build>
  40. </project>

网关信息配置:

  1. server:
  2. port: 10010
  3. logging:
  4. level:
  5. cn.itcast: debug
  6. pattern:
  7. dateformat: MM-dd HH:mm:ss:SSS
  8. spring:
  9. application:
  10. name: gateway
  11. cloud:
  12. nacos:
  13. server-addr: nacos:8848 # nacos地址
  14. gateway:
  15. routes:
  16. - id: user-service # 路由标示,必须唯一
  17. uri: lb://userservice # 路由的目标地址
  18. predicates: # 路由断言,判断请求是否符合规则
  19. - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
  20. - id: order-service
  21. uri: lb://orderservice
  22. predicates:
  23. - Path=/order/**
  24. default-filters:
  25. - AddRequestHeader=Truth,Itcast is freaking awesome!

  1. server:
  2. port: 10010
  3. logging:
  4. level:
  5. cn.itcast: debug
  6. pattern:
  7. dateformat: MM-dd HH:mm:ss:SSS
  8. spring:
  9. application:
  10. name: gateway
  11. cloud:
  12. nacos:
  13. server-addr: nacos:8848 # nacos地址
  14. gateway:
  15. routes:
  16. - id: user-service # 路由标示,必须唯一
  17. uri: lb://userservice # 路由的目标地址
  18. predicates: # 路由断言,判断请求是否符合规则
  19. - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
  20. - id: order-service
  21. uri: lb://orderservice
  22. predicates:
  23. - Path=/order/**
  24. default-filters:
  25. - AddRequestHeader=Truth,Itcast is freaking awesome!

网关过滤器配置:

  1. server:
  2. port: 10010
  3. logging:
  4. level:
  5. cn.itcast: debug
  6. pattern:
  7. dateformat: MM-dd HH:mm:ss:SSS
  8. spring:
  9. application:
  10. name: gateway
  11. cloud:
  12. nacos:
  13. server-addr: nacos:8848 # nacos地址
  14. gateway:
  15. routes:
  16. - id: user-service # 路由标示,必须唯一
  17. uri: lb://userservice # 路由的目标地址
  18. predicates: # 路由断言,判断请求是否符合规则
  19. - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
  20. - id: order-service
  21. uri: lb://orderservice
  22. predicates:
  23. - Path=/order/**
  24. default-filters:
  25. - AddRequestHeader=Truth,Itcast is freaking awesome!

全局过滤器

  1. package cn.itcast.gateway;
  2.  
  3. import org.springframework.cloud.gateway.filter.GatewayFilterChain;
  4. import org.springframework.cloud.gateway.filter.GlobalFilter;
  5. import org.springframework.core.Ordered;
  6. import org.springframework.http.HttpStatus;
  7. import org.springframework.http.server.reactive.ServerHttpRequest;
  8. import org.springframework.stereotype.Component;
  9. import org.springframework.util.MultiValueMap;
  10. import org.springframework.web.server.ServerWebExchange;
  11. import reactor.core.publisher.Mono;
  12.  
  13. // @Order(-1) 表示过滤顺序
  14. @Component
  15. public class AuthorizeFilter implements GlobalFilter, Ordered {
  16. @Override
  17. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  18. // 1.获取请求参数
  19. ServerHttpRequest request = exchange.getRequest();
  20. MultiValueMap<String, String> params = request.getQueryParams();
  21. // 2.获取参数中的 authorization 参数
  22. String auth = params.getFirst("authorization");
  23. // 3.判断参数值是否等于 admin
  24. if ("admin".equals(auth)) {
  25. // 4.是,放行
  26. return chain.filter(exchange);
  27. }
  28. // 5.否,拦截
  29. // 5.1.设置状态码
  30. exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
  31. // 5.2.拦截请求
  32. return exchange.getResponse().setComplete();
  33. }
  34.  
  35. @Override // 表示过滤顺序
  36. public int getOrder() {
  37. return -1;
  38. }
  39. }

网关跨域攻击问题处理:

  1. server:
  2. port: 10010
  3. logging:
  4. level:
  5. cn.itcast: debug
  6. pattern:
  7. dateformat: MM-dd HH:mm:ss:SSS
  8. spring:
  9. application:
  10. name: gateway
  11. cloud:
  12. nacos:
  13. server-addr: nacos:8848 # nacos地址
  14. gateway:
  15. routes:
  16. - id: user-service # 路由标示,必须唯一
  17. uri: lb://userservice # 路由的目标地址
  18. predicates: # 路由断言,判断请求是否符合规则
  19. - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
  20. - id: order-service
  21. uri: lb://orderservice
  22. predicates:
  23. - Path=/order/**
  24. default-filters:
  25. - AddRequestHeader=Truth,Itcast is freaking awesome!\
  26. globalcors: # 全局跨域处理
  27. add-to-simple-url-handler-mapping: true # 加入到简易URL处理器映射 是
  28. cors-configurations:
  29. '[/**]': # 路径格式, 所有路径
  30. allowedOrigins: # 允许哪些网站跨域请求
  31. - "http://localhost:8090"
  32. - "http://localhost:8091"
  33. allowedMethods: # 允许的请求方式
  34. - "GET"
  35. - "POST"
  36. - "PUT"
  37. - "DELETE"
  38. - "OPTIONS"
  39. - "HEADER"
  40. allowedHeaders: "*" # 允许在请求头中携带信息
  41. allowedCrendentials: true # 允许带Cookie
  42. maxAge: 360000 # 跨域检测的有效期?

【SpringCloud】Re04 Gateway的更多相关文章

  1. 【springcloud】API Gateway 的路由和过滤(Zuul--1)

    转自:https://blog.csdn.net/pengjunlee/article/details/87084646 Zuul是什么? API Gateway 是随着微服务(Microservic ...

  2. 【springcloud】springcloud Greenwich SR4版本笔记

    springcloud Greenwich SR4版本笔记 本文只记录实际版本,配置,pom,代码以及注意事项.别的在其他springcloud 的F版本中已有详述. 示例代码地址:https://g ...

  3. 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值

    [SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...

  4. 【SpringCloud】02.微服务与SpringCloud

    微服务的特点 一系列微小的服务共同组成 跑在自己的进程里 每个服务为独立的业务开发 独立部署 分布式管理 异构--不同的语言.不同类型的数据库 微服务架构的基础框架/组件 服务注册发现 服务网关(Se ...

  5. 【SpringCloud】第十二篇: 断路器监控(Hystrix Turbine)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  6. 【SpringCloud】第十一篇: 断路器监控(Hystrix Dashboard)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  7. 【SpringCloud】 第十篇: 高可用的服务注册中心

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  8. 【SpringCloud 】第八篇: 消息总线(Spring Cloud Bus)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  9. 【SpringCloud】第七篇: 高可用的分布式配置中心(Spring Cloud Config)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  10. 【SpringCloud】第六篇: 分布式配置中心(Spring Cloud Config)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

随机推荐

  1. CF437E The Child and Polygon

    The Child and Polygon 题解 这世界这么大,遇到了这个奇奇怪怪的题. 这道题其实可以很自然的联想到卡特兰数. 在卡特兰数的计数中,有这么一个意义:\(C_n\) 表示把有 \(n+ ...

  2. SpringBoot系列(二) 环境搭建,创建我的第一个程序HelloWord。

    环境准备: jdk1.8:java version "1.8.0_231",详见链接 maven3.x:maven3.3以上版本,详见链接 IDEA2021:IntelliJ ID ...

  3. Windows下cmd命令行sftp上传至Linux服务器

    1.Windows+R进入运行 2.输入cmd,进入命令行 3.命令建立连接 sftp 用户名@ip地址 例如: 输入密码,即可建立连接 上传方式: 1)直接拖动文件到命令行窗口,可以直接显示该文件的 ...

  4. django通过channels实现websocket

    WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与服务器全双工(full-duplex ...

  5. 安装nodejs易遇到的坑

    @ 目录 背景描述 流程步骤 小结 背景描述 我的服务器是centos7.9,打算先直接通过yum安装,但是yum不能指定node版本,我直接指定显示404找不到,然后我设置了下node下载的源,还是 ...

  6. axios 下载文件流

    axios 下载文件流 背景:在处理文件下载时,服务端存在校验,需要在请求头里添加token 这时直接使用 a 标签就不能满足需求.接下来我们直接通过 axios 请求,在请求头里设置 token 请 ...

  7. email邮件(带附件,模拟文件上传,跨服务器)发送核心代码 Couldn't connect to host, port: smtp.163.com, 25; timeout -1;

    邮件(带附件,模拟文件上传,跨服务器)发送核心代码1.测试邮件发送附件接口 /** * 测试邮件发送附件 * @param multipartFile * @return */ @RequestMap ...

  8. 一文详解分布式 ID

    前言 分布式系统中,我们经常需要对数据.消息等进行唯一标识,这个唯一标识就是分布式 ID,那么我们如何设计它呢?本文将详细讲述分布式 ID 及其生成方案. 一.为什么需要分布式 ID 目前大部分的系统 ...

  9. 使用python+pytesseract实现图片中文字的识别

    一.安装tesseract 1.下载链接 https://digi.bib.uni-mannheim.de/tesseract/ 2.网盘下载地址 链接:https://pan.baidu.com/s ...

  10. python selenium UI自动化操作iframe及返回默认页面

    页面操作的场景:进到到页面A,选择页面A里面的记录,点击签约, 弹出一个弹窗B,弹窗B的内容是协议及同意按钮或其他非同意的提示信息,主要的操作,打开页面A,点击签约,点击同意,操作完成 分析页面的组成 ...