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实战) 今天我们就来聊一聊另一个 ...
随机推荐
- 多个tomcat启停脚本server.sh
vi server.sh #!/bin/bash export JAVA_HOME=/u01/java_home/jdk1.8.0_181 export JRE_HOME=${JAVA_HOME}/j ...
- 单机stome安装
先安装zookeeper,参考本文件夹下安装文档 启动zookeeper 1.解压stome /opt/Server目录下 tar -zxf apache-storm-1.1.0.tar.gz 2.修 ...
- "最新"部署幻兽帕鲁游戏服务器及开局经验分享
Banner 2024,<幻兽帕鲁><雾锁王国>等游戏爆火!那么如何快速拥有一个可以跟小伙伴们愉快玩耍的服务器呢?社区里不少小伙伴已经给出了自己的最佳实践,你甚至不需要懂技术, ...
- C# OpenMP
在C#中实现代码优化,并行的方式来提升速度. 参考链接:https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/ho ...
- 若依-Vue 单体版本 更换mybatisPlus
1.单体模块在pom.xml ; 多模块版本在ruoyi-common\pom.xml.模块添加整合依赖 <!-- mybatis-plus 增强CRUD --> <dependen ...
- Flink学习(十五) 滑动事件时间窗口加上水位线开始窗口时间如何确定?(底层源码)
先看上一节的代码程序 package com.wyh.windowsApi import org.apache.flink.streaming.api.TimeCharacteristic impor ...
- 基于Microsoft.Extensions.VectorData实现语义搜索
大家好,我是Edison. 上周水了一篇 Microsoft.Extensions.AI 的介绍文章,很多读者反馈想要了解更多.很多时候,除了集成LLM实现聊天对话,还会有很多语义搜索和RAG的使用场 ...
- DeepSeek满血版测试
技术背景 很多厂商以次充好,用蒸馏版DeepSeek冒充满血版.本文提供一些收集的问题集,可以用于测试是否满血DeepSeek.经过实际测试,国内厂商中只有满血版DeepSeek可以全对.但是各厂商后 ...
- Selenium KPI接口- 鼠标案例
鼠标操作 实现功能:百度页面->移动到'设置'按钮->右键点击/鼠标双击/鼠标拖拽到元素松开. 首先导入ActionChains方法 使用格式:ActionChains(driver).操 ...
- Towards Accurate Alignment in Real-time 3D Hand-Mesh Reconstruction论文解读
Towards Accurate Alignment in Real-time 3D Hand-Mesh Reconstruction论文解读 这是发表在ICCV2021的一篇文章,主要的工作内容是R ...