【SpringCloud】Re04 Gateway
微服务网关:
1、身份认证 和 权限校验
2、服务路由、负载均衡
3、请求限流
搭建服务网关:
网关是一个独立的服务,同样需要被注册中心注册到,这里依然使用的是Nacos
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>cloud-demo</artifactId>
- <groupId>cn.itcast.demo</groupId>
- <version>1.0</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <artifactId>gateway</artifactId>
- <properties>
- <maven.compiler.source>8</maven.compiler.source>
- <maven.compiler.target>8</maven.compiler.target>
- </properties>
- <dependencies>
- <!--nacos服务注册发现依赖-->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
- <!--网关gateway依赖-->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-gateway</artifactId>
- </dependency>
- </dependencies>
- <build>
- <finalName>app</finalName>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
网关信息配置:
- server:
- port: 10010
- logging:
- level:
- cn.itcast: debug
- pattern:
- dateformat: MM-dd HH:mm:ss:SSS
- spring:
- application:
- name: gateway
- cloud:
- nacos:
- server-addr: nacos:8848 # nacos地址
- gateway:
- routes:
- - id: user-service # 路由标示,必须唯一
- uri: lb://userservice # 路由的目标地址
- predicates: # 路由断言,判断请求是否符合规则
- - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
- - id: order-service
- uri: lb://orderservice
- predicates:
- - Path=/order/**
- default-filters:
- - AddRequestHeader=Truth,Itcast is freaking awesome!
- server:
- port: 10010
- logging:
- level:
- cn.itcast: debug
- pattern:
- dateformat: MM-dd HH:mm:ss:SSS
- spring:
- application:
- name: gateway
- cloud:
- nacos:
- server-addr: nacos:8848 # nacos地址
- gateway:
- routes:
- - id: user-service # 路由标示,必须唯一
- uri: lb://userservice # 路由的目标地址
- predicates: # 路由断言,判断请求是否符合规则
- - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
- - id: order-service
- uri: lb://orderservice
- predicates:
- - Path=/order/**
- default-filters:
- - AddRequestHeader=Truth,Itcast is freaking awesome!
网关过滤器配置:
- server:
- port: 10010
- logging:
- level:
- cn.itcast: debug
- pattern:
- dateformat: MM-dd HH:mm:ss:SSS
- spring:
- application:
- name: gateway
- cloud:
- nacos:
- server-addr: nacos:8848 # nacos地址
- gateway:
- routes:
- - id: user-service # 路由标示,必须唯一
- uri: lb://userservice # 路由的目标地址
- predicates: # 路由断言,判断请求是否符合规则
- - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
- - id: order-service
- uri: lb://orderservice
- predicates:
- - Path=/order/**
- default-filters:
- - AddRequestHeader=Truth,Itcast is freaking awesome!
全局过滤器
- 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.stereotype.Component;
- import org.springframework.util.MultiValueMap;
- import org.springframework.web.server.ServerWebExchange;
- import reactor.core.publisher.Mono;
- // @Order(-1) 表示过滤顺序
- @Component
- public class AuthorizeFilter implements GlobalFilter, Ordered {
- @Override
- public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
- // 1.获取请求参数
- ServerHttpRequest request = exchange.getRequest();
- MultiValueMap<String, String> params = request.getQueryParams();
- // 2.获取参数中的 authorization 参数
- String auth = params.getFirst("authorization");
- // 3.判断参数值是否等于 admin
- if ("admin".equals(auth)) {
- // 4.是,放行
- return chain.filter(exchange);
- }
- // 5.否,拦截
- // 5.1.设置状态码
- exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
- // 5.2.拦截请求
- return exchange.getResponse().setComplete();
- }
- @Override // 表示过滤顺序
- public int getOrder() {
- return -1;
- }
- }
网关跨域攻击问题处理:
- server:
- port: 10010
- logging:
- level:
- cn.itcast: debug
- pattern:
- dateformat: MM-dd HH:mm:ss:SSS
- spring:
- application:
- name: gateway
- cloud:
- nacos:
- server-addr: nacos:8848 # nacos地址
- gateway:
- routes:
- - id: user-service # 路由标示,必须唯一
- uri: lb://userservice # 路由的目标地址
- predicates: # 路由断言,判断请求是否符合规则
- - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
- - id: order-service
- uri: lb://orderservice
- predicates:
- - Path=/order/**
- default-filters:
- - AddRequestHeader=Truth,Itcast is freaking awesome!\
- globalcors: # 全局跨域处理
- add-to-simple-url-handler-mapping: true # 加入到简易URL处理器映射 是
- cors-configurations:
- '[/**]': # 路径格式, 所有路径
- allowedOrigins: # 允许哪些网站跨域请求
- - "http://localhost:8090"
- - "http://localhost:8091"
- allowedMethods: # 允许的请求方式
- - "GET"
- - "POST"
- - "PUT"
- - "DELETE"
- - "OPTIONS"
- - "HEADER"
- allowedHeaders: "*" # 允许在请求头中携带信息
- allowedCrendentials: true # 允许带Cookie
- maxAge: 360000 # 跨域检测的有效期?
【SpringCloud】Re04 Gateway的更多相关文章
- 【springcloud】API Gateway 的路由和过滤(Zuul--1)
转自:https://blog.csdn.net/pengjunlee/article/details/87084646 Zuul是什么? API Gateway 是随着微服务(Microservic ...
- 【springcloud】springcloud Greenwich SR4版本笔记
springcloud Greenwich SR4版本笔记 本文只记录实际版本,配置,pom,代码以及注意事项.别的在其他springcloud 的F版本中已有详述. 示例代码地址:https://g ...
- 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值
[SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...
- 【SpringCloud】02.微服务与SpringCloud
微服务的特点 一系列微小的服务共同组成 跑在自己的进程里 每个服务为独立的业务开发 独立部署 分布式管理 异构--不同的语言.不同类型的数据库 微服务架构的基础框架/组件 服务注册发现 服务网关(Se ...
- 【SpringCloud】第十二篇: 断路器监控(Hystrix Turbine)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 【SpringCloud】第十一篇: 断路器监控(Hystrix Dashboard)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 【SpringCloud】 第十篇: 高可用的服务注册中心
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 【SpringCloud 】第八篇: 消息总线(Spring Cloud Bus)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 【SpringCloud】第七篇: 高可用的分布式配置中心(Spring Cloud Config)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 【SpringCloud】第六篇: 分布式配置中心(Spring Cloud Config)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
随机推荐
- CF437E The Child and Polygon
The Child and Polygon 题解 这世界这么大,遇到了这个奇奇怪怪的题. 这道题其实可以很自然的联想到卡特兰数. 在卡特兰数的计数中,有这么一个意义:\(C_n\) 表示把有 \(n+ ...
- SpringBoot系列(二) 环境搭建,创建我的第一个程序HelloWord。
环境准备: jdk1.8:java version "1.8.0_231",详见链接 maven3.x:maven3.3以上版本,详见链接 IDEA2021:IntelliJ ID ...
- Windows下cmd命令行sftp上传至Linux服务器
1.Windows+R进入运行 2.输入cmd,进入命令行 3.命令建立连接 sftp 用户名@ip地址 例如: 输入密码,即可建立连接 上传方式: 1)直接拖动文件到命令行窗口,可以直接显示该文件的 ...
- django通过channels实现websocket
WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与服务器全双工(full-duplex ...
- 安装nodejs易遇到的坑
@ 目录 背景描述 流程步骤 小结 背景描述 我的服务器是centos7.9,打算先直接通过yum安装,但是yum不能指定node版本,我直接指定显示404找不到,然后我设置了下node下载的源,还是 ...
- axios 下载文件流
axios 下载文件流 背景:在处理文件下载时,服务端存在校验,需要在请求头里添加token 这时直接使用 a 标签就不能满足需求.接下来我们直接通过 axios 请求,在请求头里设置 token 请 ...
- email邮件(带附件,模拟文件上传,跨服务器)发送核心代码 Couldn't connect to host, port: smtp.163.com, 25; timeout -1;
邮件(带附件,模拟文件上传,跨服务器)发送核心代码1.测试邮件发送附件接口 /** * 测试邮件发送附件 * @param multipartFile * @return */ @RequestMap ...
- 一文详解分布式 ID
前言 分布式系统中,我们经常需要对数据.消息等进行唯一标识,这个唯一标识就是分布式 ID,那么我们如何设计它呢?本文将详细讲述分布式 ID 及其生成方案. 一.为什么需要分布式 ID 目前大部分的系统 ...
- 使用python+pytesseract实现图片中文字的识别
一.安装tesseract 1.下载链接 https://digi.bib.uni-mannheim.de/tesseract/ 2.网盘下载地址 链接:https://pan.baidu.com/s ...
- python selenium UI自动化操作iframe及返回默认页面
页面操作的场景:进到到页面A,选择页面A里面的记录,点击签约, 弹出一个弹窗B,弹窗B的内容是协议及同意按钮或其他非同意的提示信息,主要的操作,打开页面A,点击签约,点击同意,操作完成 分析页面的组成 ...