Spring Cloud Gateway 使用 Token 验证
引入依赖
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
</dependencies>
自定义过滤器
可以继承 AbstractGatewayFilterFactory
或实现 GlobalFilter
实现过滤请求功能
GatewayFilter
GatewayFilter 只能指定路径上应用
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;@Component
public class AuthGatewayFilterFactory extends AbstractGatewayFilterFactory<AuthGatewayFilterFactory.Config> {public AuthGatewayFilterFactory() {super(Config.class);}@Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) -> {System.out.println("Welcome to AuthFilter.");String token = exchange.getRequest().getHeaders().getFirst("sign");if (Config.secret.equals(token)) {return chain.filter(exchange);}ServerHttpResponse response = exchange.getResponse();response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();};}static class Config {static String secret = "1234";}
}
spring:cloud:gateway:routes:- id: service2_routeuri: http://127.0.0.1:8082predicates:- Path=/s2/**filters:- StripPrefix=1 # 去掉路径的 n 个前缀- Auth=true # 输入过滤器类的名称前缀
GlobalFilter
GlobalFilter 可以在全局应用
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.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Component
public class AuthGlobalFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("Welcome to AuthGlobalFilter.");ServerHttpRequest request = exchange.getRequest();String sign = request.getHeaders().get("sign").get(0);String token = "1234";if(token.equals(sign)) {return chain.filter(exchange);}ServerHttpResponse response = exchange.getResponse();response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}@Overridepublic int getOrder() {return 0;}
}
Spring Cloud Gateway 使用 Token 验证相关推荐
- Spring Cloud Gateway 实现Token校验
目录 前言 1. 生成Token 1.1. Token生成与校验工具类 1.2. 生成token 2. 校验Token 3. Spring Cloud Gateway 3.1. GatewayFilt ...
- Spring Cloud Gateway实现网关统一鉴权,网关统一Token认证
需求背景 在微服务的场景下,采用了Spring Cloud Oauth2进行token的管理,实现认证和授权,在这下背景下,有两种解决方案: 网关统一鉴权 此模式适用于网关下的所有模式都是通过一种模式 ...
- spring cloud gateway之filter篇
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在上一篇文章详细的介绍了Gateway的Predict,Predict决定了请求由哪一个路由处理, ...
- Spring Cloud Gateway 雪崩了,该怎么办不要慌
问题现象与背景 昨晚我们的网关雪崩了一段时间,现象是: 1.不断有各种微服务报异常:在写 HTTP 响应的时候,连接已经关闭: reactor.netty.http.client.PrematureC ...
- Spring Cloud Gateway 入门
认识 Spring Cloud Gateway Spring Cloud Gateway 是一款基于 Spring 5,Project Reactor 以及 Spring Boot 2 构建的 API ...
- 微服务接入oauth2_微服务权限终极解决方案,Spring Cloud Gateway+Oauth2实现统一认证和鉴权!...
最近发现了一个很好的微服务权限解决方案,可以通过认证服务进行统一认证,然后通过网关来统一校验认证和鉴权.此方案为目前最新方案,仅支持Spring Boot 2.2.0.Spring Cloud Hox ...
- spring react_使用Spring Cloud Gateway保护React式微服务
spring react 朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 数分钟之内即可在任何应用程序中对用户进行身份验证,管理和保护. 所以你想 ...
- 使用Spring Cloud Gateway保护反应式微服务
朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 所以你想完全反应,是吗? 大! ...
- Spring Cloud —— Gateway 服务网关
导航 一.什么是服务网关 二.业界常见网关组件 三.Spring Cloud Gateway 四.Gateway 快速入门 4.1 创建 gateway 服务 4.2 添加 gateway 依赖和 n ...
最新文章
- 简单几步让CentOS系统时间同步
- Spring Cloud Alibaba发布第二个版本,Spring 发来贺电
- 帝国CMS的phomenewspic/ecmsinfo标签详解
- 20165220 第七周学习总结
- MySQL explain
- 苏宁大数据怎么运营_运营商大数据精准获客
- k均值聚类算法案例 r语言iris_聚类分析—系统聚类
- Linux下安装python及MySQLdb
- 在uniapp中配置并colorui及阿里图标
- STM32进行软件调试步骤:
- 游戏邦社交游戏-手机游戏行业分析报告(2010年版)
- java的LocalDateTime类来获取当天时间、前一天时间,本周的开始和结束时间、本月的开始和结束时间
- 实例:用C#.NET手把手教你做微信公众号开发(19)--使用微信支付转账到微信粉丝零钱账户
- 端点科技春招笔试回忆(Java方向)
- 如何写一个自动重复发消息的脚本,聪哥手把手教你(适配任何可发消息的app),亲测有效
- C++使用windowAPI开启3389端口
- Gitlab和AD账号集成,账号登录时报错:Invalid credentials
- 阿里云虚拟主机共享和独享区别对比
- [codeforces 1333A] Little Artem 读懂题+找规律+多举例
- json数据导出到excel中
热门文章
- “黑科技”要会用才行,探讨人工智能如何落地
- 「GAN」如何生动有趣地对GAN进行可视化?Google的GAN Lab请了解
- 组合求解器 + 深度学习 =?这篇ICLR 2020论文告诉你答案
- AAAI 2020 | 华南理工:面向文本识别的去耦注意力网络
- 【SAP技术】SAP不能修改一个已经分配给交货单的HU
- 【风之语】至贱城市之苏州
- 在人工智能领域,人工智能机器无法如人一样理解常识知识
- 谷歌发布深度学习新算法,适用于真实机器人的技能学习
- 中国AI科研产出全球第一 但引文影响力低
- 科普丨深度学习 vs 概率图模型 vs 逻辑学