AntPathMatcher正则

一、介绍

1、简介

路径在很多地方都会使用,比如:文件名,URL地址等,JDK 提供了 Path 类用来表示路径。实际使用时,经常需要通过一个路径表示多个地址,比如,Spring 启动时的扫描路径,这就需要增加对通配符的支持,同时也就需要支持对通配符的匹配。

Spring 设计了 PathMatcher 路径匹配器接口,用于支持带通配符的资源路径匹配。这个接口在 Spring 的多个地方得到应用,比如:

PathMatchingResourcePatternResolver:资源扫描,启动时扫描并加载资源
AbstractUrlHandlerMapping:请求路径映射到 Controller
WebContentInterceptor:拦截器拦截路径分析

2、匹配规则

Spring 为 PathMatcher 接口提供了一个默认实现 AntPathMatcher,支持 Ant 风格的路径匹配

匹配符描述
?匹配一个字符
*匹配多个字符
**匹配多层路径

另外,AntPathMatcher 还支持 {} 进行参数匹配

antPathMatcher.match("/root/aaa","/root/aaa"); // true
antPathMatcher.match("/root/*",  "/root/aaa"); // true
// true,都以 / 结束
antPathMatcher.match("/root/*/", "/root/aaa/");// true
// false,结束符不一致
antPathMatcher.match("/root/*", "/root/aaa/"); // false
// true,/ 匹配 /*
antPathMatcher.match("/root/aaa/*", "/root/aaa/"); // true
// true,/ 匹配 /**
antPathMatcher.match("/root/aaa/**", "/root/aaa/"); // trueantPathMatcher.matchStart("/user/*","/user/001"); // 返回 true
antPathMatcher.matchStart("/user/*","/user"); // 返回 true
antPathMatcher.matchStart("/user/*","/user001"); // 返回 false
antPathMatcher.extractPathWithinPattern("uc/profile*","uc/profile.html"); // 返回 profile.html
antPathMatcher.combine("uc/*.html","uc/profile.html"); // uc/profile.html
 3、demo
public class UrlConstants {public static final String WEB_API_PRE = "/v1/**";public static final String OPEN_API_PRE = "/openApi/**";public static final List<AntPathRequestMatcher> WEB_MATCHERS =  List.of(new AntPathRequestMatcher(WEB_API_PRE));public static final List<AntPathRequestMatcher> OPEN_API_MATCHERS =List.of(new AntPathRequestMatcher(OPEN_API_PRE));
}
public static boolean urlMatches(HttpServletRequest request, List<AntPathRequestMatcher> matchers) {Optional<AntPathRequestMatcher> first = matchers.stream().filter(m -> m.matches(request)).findFirst();return first.isPresent();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149028.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

远程监控电脑屏幕用什么软件?8款真实好用的远程监控电脑屏幕软件推荐!

远程监控电脑屏幕是现代企业管理、远程协作以及家庭安全中的重要需求。 为了满足这一需求&#xff0c;市场上涌现出了多款功能强大、操作便捷的远程监控软件。 以下是8款真实好用的远程监控电脑屏幕软件推荐&#xff1a; 1. 安企神软件 特点&#xff1a;此软件专为企业设计&…

骨传导耳机哪个牌子好?深度解析五大高销量骨传导耳机!

在快节奏的现代生活中&#xff0c;耳机已成为我们不可或缺的伴侣&#xff0c;无论是在通勤路上、健身时还是日常工作中&#xff0c;它都能为我们提供音乐、通话和信息的即时接入。随着科技的发展&#xff0c;耳机的种类也日益丰富&#xff0c;其中骨传导耳机以其独特的声音传导…

恢复数据解决方案 :因意外删除而丢失重要数据的痛苦急救方法

您是否因意外删除 iOS 设备上的重要文件而丢失了文件&#xff1f;您听说过Geekersoft iPhone 数据恢复工具吗&#xff1f;Geekersoft iPhone 数据恢复工具提供了恢复丢失数据的完美解决方案。此 iOS 数据恢复工具具有多种恢复模式&#xff0c;可恢复已删除的文件。 全球许多用…

老包莫名被暂停、删除?Google Play审核这些坑你踩了吗?

相信很多开发者都经历过这样的“晴天霹雳”&#xff1a;自己辛辛苦苦维护多年的应用&#xff0c;突然之间被Google Play暂停或直接删除&#xff0c;理由是“欺骗行为”。收到这样的邮件&#xff0c;开发者往往是一脸懵逼&#xff0c;尤其是那些在架时间长、老老实实运营的“老包…

测试3个月,成功入职 “字节”,我的面试心得总结!

今天来给大家讲一下软件测试工程师的面试一些技巧、建议&#xff0c;以及你们在面试过程中需要做的一些准备、注意事项。 很多的小伙伴在刚刚学习完软件测试后就要面临一个问题&#xff1a;就业找工作。找工作要面临的第一件事儿就是面试&#xff0c;很多小伙伴对面试完全是模糊…

进阶SpringBoot之分布式系统与 RPC 原理

分布式系统是若干独立计算机的集合&#xff0c;这些计算机对于用户来说就像单个相关系统 分布式系统是由一组通过网络进行通信&#xff0c;为了完成共同的任务而协调工作的计算机节点组成的系统 其目的是利用更多的机器&#xff0c;处理更多的数据 RPC&#xff08;Remote Pr…

两数之和、三数之和、四数之和

目录 两数之和 题目链接 题目描述 思路分析 代码实现 三数之和 题目链接 题目描述 思路分析 代码实现 四数之和 题目链接 题目描述 思路分析 代码实现 两数之和 题目链接 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 题目…

文心快码太牛啦

在工作中遇到这种重复性的文本处理&#xff0c;可以使用问心快码帮助提升工作效率&#xff0c;把自己从重复劳动中解放出来。在写代码的时候也可以使用问心快码&#xff0c;比如&#xff1a; 1、每次对函数进行命名的时候就很头疼&#xff0c;能否出一个函数命名的快捷入口&…

国央企如何完善黑名单排查体系?

国央企完善黑名单排查体系的关键在于建立健全的供应商管理机制、风险评估体系和信息共享平台。以下是一些具体措施&#xff1a; 1.建立黑名单库&#xff1a;国央企可以依据外部黑名单数据&#xff08;如政府监管部门、行业协会、第三方征信机构公布的黑名单&#xff09;和内部…

如何编写高质量的用户故事

本文详细介绍了如何在敏捷开发过程中编写高质量用户故事&#xff08;User Story&#xff09;&#xff0c;包括用户故事的定义、结构、撰写技巧以及如何与产品待办列表&#xff08;Product Backlog&#xff09;中的其他工作项&#xff08;PBI&#xff09;相结合&#xff0c;以提…

自动化学习2:pytest的高级用法(mark标记/fixture/hook)

一.mark的用法 概念&#xff1a;Pytest提供的mark标记&#xff0c;允许我们标记测试函数&#xff0c;测试类和整个模块。通过不同的标记实现不同的运行策略&#xff0c;如标记冒烟测试用例。 1.注册标记 可以在pytest.ini文件注册自定义标记 除了自己注册的标记外&#xff0…

Android 深层链接利用

为了能够从我们的应用程序打开另一个应用程序&#xff0c;我们通常通过声明我们想要访问的 Activity 类的名称来实现这一功能。但是&#xff0c;如果我们要打开的 Activity 在其清单文件中设置了android:exported"false" &#xff0c;则无法使用此方法。而其中一种替…

Open3D(C++) 基于点云的曲率提取特征点(自定义阈值法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,首发于:2024年9月23日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 一、算法原理 点云的曲率反映了点云表面的凹凸程度,根据点云曲率的分布情况,设置合适的阈值,提取…

安畅检测受邀参与“长清区数字化转型企业对接会”

9月11日下午&#xff0c;长清区工信局召开“长清区数字化转型企业对接会”&#xff0c;链接数字化服务商与亟待数字化升级的企业代表&#xff0c;共商推进数字化诊断等事项&#xff0c;安畅检测数字化诊断项目负责人受邀出席本次会议。 会上&#xff0c;长清区工信局相关负责人…

性能测试问题诊断-接口耗时高

问题现象&#xff1a;近期发现每晚跑的定时压测任务&#xff0c;压测结果中&#xff0c;各接口耗时变高&#xff08;原来99耗时<3秒&#xff0c;当前99耗时>20秒)。 问题排查&#xff1a; 查看jmeter 生成的结果图&#xff0c;发现压测2分钟后出现接口耗时变高情况。如下…

安装一个本地大模型

详细的教程基于 AnythingLLM 及 Ollama 构建本地知识库 - knqiufan - 博客园 安装本地大模型之后&#xff0c;用如下方式启动 ollama run deepseek-v2:16b。

海豚调度运行成功但无法生成实例解决

海豚调度运行成功但无法生成实例解决 问题描述 点击运行&#xff0c;提示运行成功但无法在工作实例中看到 问题定位 查看资源监控&#xff0c;内存占用80% 查看master日志 tail -f /home/dolphinscheduler/tmp/dolphinscheduler/master-server/logs/dolphinscheduler-m…

Webpack 介绍

Webpack 介绍 Date: August 29, 2024 全文概要 Webpack概念&#xff1a; Webpack是一个静态的模块化的打包工具&#xff0c;可以为现代的 JavaSript 应用程序进行打包。 1-静态&#xff1a;Webpack可以将代码打包成最终的静态资源 2-模块化&#xff1a;webpack支持各种模块…

【Python报错已解决】AttributeError: ‘Tensor‘ object has no attribute ‘kernel_size‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【JS】forEach中push为何不会陷入死循环,稀疏数组空元素为何不会被遍历

前言 使用 forEach 时&#xff0c;遇到过如下几个问题 为什么稀疏数组空元素不会被遍历 为什么每次循环时 push 不会陷入死循环 为什么使用splice删除元素后&#xff0c;访问不到下一位元素 溯源 查阅 ecma官方文档&#xff0c;使用ECMA-262, 14th edition, June 2023版 …