查了好多,没有相应解决方案,最后通过看源码,找到PathRoutePredicateFactory

通过复制PathRoutePredicateFactory自定义一个路由断言实现,亲测成功

代码如下: 关键点在于 注释中     手动修改忽略大小写

@Component
 * 自定义断言 path忽略大小写
 * author chenjiabing
public class CustomRoutePredicateFactory extends AbstractRoutePredicateFactory<CustomRoutePredicateFactory.Config> {
    private static final Log log = LogFactory.getLog(CustomRoutePredicateFactory.class);
    private static final String MATCH_TRAILING_SLASH = "matchTrailingSlash";
    private PathPatternParser pathPatternParser = new PathPatternParser();
    public CustomRoutePredicateFactory() {
        super(CustomRoutePredicateFactory.Config.class);
    private static void traceMatch(String prefix, Object desired, Object actual, boolean match) {
        if (log.isTraceEnabled()) {
            String message = String.format("%s \"%s\" %s against value \"%s\"", prefix, desired,
                    match ? "matches" : "does not match", actual);
            log.trace(message);
    public void setPathPatternParser(PathPatternParser pathPatternParser) {
        this.pathPatternParser = pathPatternParser;
    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList("patterns", MATCH_TRAILING_SLASH);
    @Override
    public ShortcutType shortcutType() {
        return ShortcutType.GATHER_LIST_TAIL_FLAG;
    @Override
    public Predicate<ServerWebExchange> apply(CustomRoutePredicateFactory.Config config) {
        final ArrayList<PathPattern> pathPatterns = new ArrayList<>();
        synchronized (this.pathPatternParser) {
            pathPatternParser.setMatchOptionalTrailingSeparator(config.isMatchTrailingSlash());
            config.getPatterns().forEach(pattern -> {
                PathPattern pathPattern = this.pathPatternParser.parse(pattern.toLowerCase());//手动修改忽略大小写
                pathPatterns.add(pathPattern);
        return new GatewayPredicate() {
            @Override
            public boolean test(ServerWebExchange exchange) {
                PathContainer path = parsePath(exchange.getRequest().getURI().getRawPath().toLowerCase());//手动修改忽略大小写
                PathPattern match = null;
                for (int i = 0; i < pathPatterns.size(); i++) {
                    PathPattern pathPattern =pathPatterns.get(i) ;
                    if (pathPattern.matches(path)) {
                        match = pathPattern;
                        break;
                if (match != null) {
                    traceMatch("Pattern", match.getPatternString(), path, true);
                    PathMatchInfo pathMatchInfo = match.matchAndExtract(path);
                    putUriTemplateVariables(exchange, pathMatchInfo.getUriVariables());
                    return true;
                else {
                    traceMatch("Pattern", config.getPatterns(), path, false);
                    return false;
            @Override
            public String toString() {
                return String.format("Paths: %s, match trailing slash: %b", config.getPatterns(),
                        config.isMatchTrailingSlash());
    @Validated
    public static class Config {
        private List<String> patterns = new ArrayList<>();
        private boolean matchTrailingSlash = true;
        public List<String> getPatterns() {
            return patterns;
        public CustomRoutePredicateFactory.Config setPatterns(List<String> patterns) {
            this.patterns = patterns;
            return this;
         * @deprecated use {@link #isMatchTrailingSlash()}
        @Deprecated
        public boolean isMatchOptionalTrailingSeparator() {
            return isMatchTrailingSlash();
         * @deprecated use {@link #setMatchTrailingSlash(boolean)}
        @Deprecated
        public CustomRoutePredicateFactory.Config setMatchOptionalTrailingSeparator(boolean matchOptionalTrailingSeparator) {
            setMatchTrailingSlash(matchOptionalTrailingSeparator);
            return this;
        public boolean isMatchTrailingSlash() {
            return matchTrailingSlash;
        public CustomRoutePredicateFactory.Config setMatchTrailingSlash(boolean matchTrailingSlash) {
            this.matchTrailingSlash = matchTrailingSlash;
            return this;
        @Override
        public String toString() {
            return new ToStringCreator(this).append("patterns", patterns)
                    .append(MATCH_TRAILING_SLASH, matchTrailingSlash).toString();
spring:
  #profiles: predicate-path #配置文件名 和 spring.profiles.active 相对应
  #配置程序名为eureka-gateway-client
  application:
    name: eureka-gateway-client
  cloud:
    #设置路由规则
    gateway:
      discovery:
        locator:
				
GateWay坑——context-path环境准备正确路由context-path和application.name不一致注册中心Gateway网关设置访问结果路由失败context-path和application.name一致注册中心Gateway网关设置访问结果路由失败-原因路由失败-解决方案gateway.discovery.locator方案一方案二包装一层前缀 eureka,gateway,要路由的服务(bit-msa-pasm-api) 正确路由 context-path和appl
一、 前言 Kong Gateway 是一个开源的轻量级 API 网关,也是目前市场上最流行的 API 网关之一。位于您的上游服务之前,您可能运行API 服务骑,但需在请求到达您的服务器时管理流量、API 网关身份验证或日志记录。kong 网关及其所有插件就能实现上述的需求。 二、kong安装 下载连接: kong 资源下载 根据自己的操作系统下载。 kong可以在有数据库和没有数据库两种情况下运行。推荐运行有数据库版本的,在后续的配置中可添加 oauth2等认证操作。 Kong 支持PostgreSQL
- spring.cloud.gateway.discovery.locator.lower-case-service-id=true 是将请求路径上的服务名配置为小写,因为服务注册的时候,向注册中心注册时将服务名转成大写的了。 - spring.cloud.gateway.discovery.locator.enabled=false 是否与服务发现组件进行结合,通过 serviceId 转发到具体的服务实例。 默认为false,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能
C#项目转Java项目的时候,出现的一些问题,由于C#没有区分大小写路由,前端页面也不够规范,同一个页面,有的是大写,有的是小写,这个在java里面就必须进行javaconfig的配置处理 具体需要添加一个统一的类来路由到页面 在Java中,java.util.regex包定义了正则表达式使用到的相关类,其中最主要的两个类为:Pattern、Matcher: Pattern 编译正则表达式后创建一个匹配模式; Matcher 使用Pattern实例提供的正则表达式对...
一.GateWay简介 Spring Cloud GatewaySpring Cloud官方推出的第二代网关框架,取代Zuul网关网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。 Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。 Predicate(断言):这是一个...
CSDN-Ada助手: 很高兴看到你写了第二篇博客,继续分享你的经验和问题解决方案。你在博客中提到的技能和知识已经很有深度和广度了,我想补充一点关于WebMvcConfigurationSupport的扩展知识。除了重写父类的方法,我们还可以在子类中添加自定义的拦截器、过滤器、视图解析器等,进一步定制化和优化我们的Web应用。希望你能继续探索和学习,分享更多有价值的内容。 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2 spring cloud gateway 网关路由忽略大小写实现 CSDN-Ada助手: 推荐 云原生入门 技能树:https://edu.csdn.net/skill/cloud_native?utm_source=AI_act_cloud_native