当前位置: 首页 > news >正文

浦东注册公司河北seo优化

浦东注册公司,河北seo优化,成都网站建设推广,汽车之家app下载问题:Spring Cloud Gateway自带的断言(Predicate)不满足业务怎么办?可以自定义断言! 先看Spring Cloud Gateway是如何实现断言的 Gateway中断言的整体架构如下: public abstract class AbstractRoutePred…

问题:Spring Cloud Gateway自带的断言(Predicate)不满足业务怎么办?可以自定义断言!

先看Spring Cloud Gateway是如何实现断言的

Gateway中断言的整体架构如下:

public abstract class AbstractRoutePredicateFactory<C> extends AbstractConfigurable<C>implements RoutePredicateFactory<C> {public AbstractRoutePredicateFactory(Class<C> configClass) {super(configClass);}
}

可以看到Gateway的断言都是继承了AbstractRoutePredicateFactory抽象类。

自定义路由断言规则的步骤如下:

  1. 新建类名CustomRoutePredicateFactory(类名需要以以RoutePredicateFactory结尾),并继承AbstractRoutePredicateFactory抽象类。
  2. 重写apply()方法
  3. 新建apply()方法所需的静态内部类CustomRoutePredicateFactory.Config,这个Config就是我们的断言规则
  4. 空参构造方法,内部调用super()方法
  5. 在Config类中配置自定义参数
  6. apply()中编写自定义的逻辑
import jakarta.validation.constraints.NotNull;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.cloud.gateway.handler.predicate.GatewayPredicate;
import org.springframework.web.server.ServerWebExchange;import java.util.function.Predicate;/*** 自定义路由断言工厂,指定的用户类型才能访问** @author gengduc@qq.com* @since 2024-03-08*/
@Component
public class CustomRoutePredicateFactory extends AbstractRoutePredicateFactory<CustomRoutePredicateFactory.Config> {public CustomRoutePredicateFactory() {super(CustomRoutePredicateFactory.Config.class);}@Overridepublic Predicate<ServerWebExchange> apply(CustomRoutePredicateFactory.Config config) {return new GatewayPredicate() {@Overridepublic boolean test(ServerWebExchange serverWebExchange) {// 这里可以编写自定义的逻辑// 获取请求中的信息,判断是否符合条件String userType = serverWebExchange.getRequest().getQueryParams().getFirst("userType");if (userType == null) {return false;}// 判断用户类型是否符合return userType.equalsIgnoreCase(config.getUserType());}};}public static class Config {// 这里可以配置一些参数@NotNullprivate String userType;public String getUserType() {return userType;}public void setUserType(String userType) {this.userType = userType;}}
}

这个时候已经可以使用我们自定义的断言了。

http://localhost:9527/order/gateway/get/1?userType=admin

在yml文件中配置:

spring:cloud:gateway:routes:- id: custom_routeuri: https://example.orgpredicates:- name: Customargs:userType: admin # 当用户类型是admin的时候进行路由转发

可以看到我们使用的配置方式是完全展开的参数配置方式(Fully Expanded Arguments),这个时候还是不支持快捷配置的。

为了让自定义的断言支持快捷配置(Shortcut Configuration),还需要实现shortcutFieldOrder()方法。

image-20240308195902106

完整的代码如下:

import jakarta.validation.constraints.NotNull;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.cloud.gateway.handler.predicate.GatewayPredicate;
import org.springframework.web.server.ServerWebExchange;import java.util.Collections;
import java.util.List;
import java.util.function.Predicate;/*** 自定义路由断言工厂,指定的用户类型才能访问** @author gengduc@qq.com* @since 2024-03-08*/
@Component
public class CustomRoutePredicateFactory extends AbstractRoutePredicateFactory<CustomRoutePredicateFactory.Config> {public CustomRoutePredicateFactory() {super(CustomRoutePredicateFactory.Config.class);}// 快捷配置支持@Overridepublic List<String> shortcutFieldOrder() {return Collections.singletonList("userType");}@Overridepublic Predicate<ServerWebExchange> apply(CustomRoutePredicateFactory.Config config) {return new GatewayPredicate() {@Overridepublic boolean test(ServerWebExchange serverWebExchange) {// 这里可以编写自定义的逻辑// 获取请求中的信息,判断是否符合条件String userType = serverWebExchange.getRequest().getQueryParams().getFirst("userType");if (userType == null) {return false;}// 判断用户类型是否符合return userType.equalsIgnoreCase(config.getUserType());}};}public static class Config {// 这里可以配置一些参数@NotNullprivate String userType;public String getUserType() {return userType;}public void setUserType(String userType) {this.userType = userType;}}
}
http://www.yayakq.cn/news/252274/

相关文章:

  • 郑州网站优化公司电话网站域名空间怎么买
  • vue网站开发教程怎么找平台推广
  • 可以免费打广告的网站仿各个网站的问题
  • 做网站实例百度收录网站技巧
  • 游戏介绍网站模板下载图库网站源码下载
  • 合肥公司建站模板j2ee 做网站
  • 内蒙古建设厅门户网站传媒公司经营范围有哪些
  • 信用门户网站建设规范怎么做网站链接的快捷方式
  • 昆山兼职做网站知名网站建设哪家好
  • 承德 网站建设 网络推广 网页设计wordpress 域名更换
  • 深圳罗湖网站开发教育直播平台网站建设费用
  • 大庆市建设大厦网站炫酷网站首页
  • 看汽车哪个网站好石家庄网站编辑
  • 凯里建设局网站wordpress分类链接后加
  • 创建网站教程极客学院 网站建设
  • 班级网站设计泰安房产网新楼盘
  • 工伤做实网站神一般的网页设计
  • wordpress网站价钱seo博客大全
  • 个人不允许建网站国产免费erp软件
  • 电脑网站建设企业网站源码 可去版权
  • 手机网站开发用什么个人备案的域名拿来做经营网站
  • 微信网站建设和维护报价表wordpress去掉搜索
  • 杭州网站推广找哪家wordpress 设置角色
  • 黄冈网站推广在线佛山市点精网络科技有限公司
  • 电子商务网站运营 需要确立创建论坛网站需要多少钱
  • 化妆品网站建设可行性报告坦克大战网站开发课程设计报告
  • 在线ui设计网站营销方案效果评估范文
  • 网站后台建设内容建设网站的申请信用卡分期付款
  • 南山商城网站建设哪家技术好wordpress新闻发布时间
  • 网站模版建设教程怎么样推广网站