SpringCloud——自定义断言工厂
场景:用户的请求头中需要有指定的用户名和密码才能访问。
断言工厂
参考系统
AfterRoutePredicateFactory写法。
package com.zjw.factory;
import lombok.Getter;
import lombok.Setter;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
/**
* @since 2023/11/28 12:09
*/
@Component
public class AuthRoutePredicateFactory extends AbstractRoutePredicateFactory<AuthRoutePredicateFactory.Config> {
/**
* DateTime key.
*/
public static final String USER_NAME_KEY = "username";
public static final String PASS_WORD_KEY = "password";
public AuthRoutePredicateFactory() {
super(AuthRoutePredicateFactory.Config.class);
}
/**
* 认证校验逻辑
*/
@Override
public Predicate<ServerWebExchange> apply(AuthRoutePredicateFactory.Config config) {
return serverWebExchange -> {
// 获取到请求中的所有header
HttpHeaders headers = serverWebExchange.getRequest().getHeaders();
// 校验header中是否包含用户名和密码,如果包含,返回true,否则返回false
List<String> pwdList = headers.get(config.getUsername());
return pwdList != null && pwdList.contains(config.getPassword());
};
}
@Getter
@Setter
public static class Config {
private String username;
private String password;
}
@Override
public List<String> shortcutFieldOrder() {
return Arrays.asList(USER_NAME_KEY, PASS_WORD_KEY);
}
}
application.yml
server:
port: 9001
spring:
application:
name: depart-consumer # 微服务名称
cloud:
gateway:
routes:
# 自定义断言工厂
- id: custom_auth_route
uri: http://localhost:8081
predicates:
- Auth=zhangsan, 123
请求头需要有zhangsan,值为123才能访问资源。

SpringCloud——自定义断言工厂的更多相关文章
- angular factory Services provider 自定义服务 工厂
转载于 作者:海底苍鹰地址:http://blog.51yip.com/jsjquery/1602.html 1.在app.js 中声明了模块的依赖 var phonecatApp = angular ...
- QT: 自定义断言;
使用Qt creator + mingw + gdb进行qt项目开发时,应用Q_ASSERT进行断言总是会出现问题: 断言失败,程序崩溃而不是停止: 采用自定义断言能完美解决该问题(方法取自于国外 ...
- Spring Cloud Alibaba学习笔记(19) - Spring Cloud Gateway 自定义过滤器工厂
在前文中,我们介绍了Spring Cloud Gateway内置了一系列的内置过滤器工厂,若Spring Cloud Gateway内置的过滤器工厂无法满足我们的业务需求,那么此时就需要自定义自己的过 ...
- Java并发编程:Java的四种线程池的使用,以及自定义线程工厂
目录 引言 四种线程池 newCachedThreadPool:可缓存的线程池 newFixedThreadPool:定长线程池 newSingleThreadExecutor:单线程线程池 newS ...
- spring自定义bean工厂模式解耦
在resources下创建bean.properties accountService=cn.flypig666.service.impl.AccountServiceImpl accountDao= ...
- 记一次自定义管理工厂使用spring自动装载bean
1.核心工厂配置类 @Componentpublic class HandlerContext { private Map<String, AbstractHandler> handler ...
- 不能使用控制器“XXXController”的单个实例处理多个请求。如果正在使用自定义控制器工厂,请确保它为每个请求创建该控制器的新实例。
原因:应用@{Html.RenderAction("aaa","XXX");}时路径路由和动作控制器不能是相同的,不然会的错. 比如:http://localh ...
- SpringCloud Gateway微服务网关实战与源码分析-上
概述 定义 Spring Cloud Gateway 官网地址 https://spring.io/projects/spring-cloud-gateway/ 最新版本3.1.3 Spring Cl ...
- SpringCloud Alibaba(三) - GateWay网关
1.基本环境搭建 1.1 依赖 <!-- Gatway 网关会和springMvc冲突,不能添加web依赖 --> <dependency> <groupId>or ...
- 看完就会的Spring Cloud Gateway
在前面几节,我给大家介绍了当一个系统拆分成微服务后,会产生的问题与解决方案:服务如何发现与管理(Nacos注册中心实战),服务与服务如何通信(Ribbon, Feign实战) 今天我们就来聊一聊另一个 ...
随机推荐
- Q:群晖磁盘断电导致,无法访问系统分区
1.群晖磁盘断电导致,无法访问系统分区 2.点击存储空间管理员-总览-点击修复 3.存储空间-文件系统检查-重启 4.重启后正常
- mybatis之使用Map和模糊查询
使用Map 接口类 package com.yeyue.dao; import com.yeyue.pojo.User; import java.util.List; import java.util ...
- 技术前瞻: ECMAScript 2025 已定稿特性解析:让 JavaScript 更优雅
作为全球应用最广泛的编程语言之一,JavaScript 每年都在通过 ECMAScript 标准持续进化.2025 年,ECMAScript 再次带来多项重磅更新,本文将带你深入解读已正式定稿的核心特 ...
- 库卡机器人KR500维修保养
随着现代工业自动化,KUKA库卡机器人以其卓越的性能.灵活的操作和高效的产出而备受赞誉.然而,为了确保机器人的持续稳定运行和延长使用寿命,应联系子锐机器人维修对库卡机器人保养至关重要. 一.库卡机器人 ...
- ITSS 运维-服务台相关内容
- pandas 判断列是否包含某个字符串
亲测第二种好用 in 语句 不包含使用not in food = df['日期'].values.tolist() if '休息' in food: print(food) if df['共计小时'] ...
- Hanoi-C
什么是汉诺塔?汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命 ...
- Error: EACCES: permission denied
前言 在安装 vue 脚手架的时候,报错 Error: EACCES: permission denied # 安装 Vue CLI 3.x npm i -g @vue/cli 解决 执行以下命令就可 ...
- laradock 安装扩展程序 pcntl
起因 运行workman脚步的时候,PHP 提示缺少 pcntl 扩展 Config git:(master) php start.php -d Please install pcntl extens ...
- 我最常用的 Visual Studio 2022 扩展插件推荐:生产力必备工具
Visual Studio 2022作为微软推出的一款功能强大的IDE,业界称之为"宇宙第一IDE".它以出色的性能.丰富的内置功能和对多种编程语言的支持,深受开发者喜爱.然而,随 ...