文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于Spring概念模型:PathMatcher 路径匹配器

2024-04-02 19:55

关注

源代码版本 : spring-webmvc-5.1.4.RELEASE

概述

PathMatcher是Spring的一个概念模型接口,该接口抽象建模了概念"路径匹配器",一个"路径匹配器"是一个用于路径匹配的工具。它的使用者是 :


org.springframework.core.io.support.PathMatchingResourcePatternResolver
org.springframework.web.servlet.handler.AbstractUrlHandlerMapping
org.springframework.web.servlet.mvc.WebContentInterceptor

Spring框架自身对概念模型接口也提供了一个缺省的实现AntPathMatcher,用于匹配Ant风格的路径。

PathMatcher接口源代码

PathMatcher接口源代码如下 :


package org.springframework.util;
import java.util.Comparator;
import java.util.Map;
public interface PathMatcher {
	
	boolean isPattern(String path);
	
	boolean match(String pattern, String path);
	
	boolean matchStart(String pattern, String path);
	
	String extractPathWithinPattern(String pattern, String path);
	
	Map<String, String> extractUriTemplateVariables(String pattern, String path);
	
	Comparator<String> getPatternComparator(String path);
	
	String combine(String pattern1, String pattern2);
}

从接口代码来理解概念还是有些抽象,下面我们列举一些基于实现类AntPathMatcher的例子来增强理解 。

AntPathMatcher使用例子


AntPathMatcher antPathMatcher = new AntPathMatcher();
antPathMatcher.isPattern("/user/001");// 返回 false
antPathMatcher.isPattern("/user/*"); // 返回 true
antPathMatcher.match("/user/001","/user/001");// 返回 true
antPathMatcher.match("/user/*","/user/001");// 返回 true
antPathMatcher.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

spring的路径匹配工具 AntPathMatcher

包路径:


org.springframework.util.AntPathMatcher

工具:


AntPathMatcher antPathMatcher = new AntPathMatcher();

以下代码为本人使用过的路径匹配工具代码

方便以后项目中使用参考:


//不需要鉴权的接口
    private Boolean excludePathFilter(String path) {
        PathProperties pathProperties = (PathProperties) PathProperties.applicationContext.getBean("pathProperties");
        List<String> excludePathPatterns = pathProperties.getExcludePathPatterns();
        if(CollectionUtils.isEmpty(excludePathPatterns)){
            return false;
        }
        return excludePathPatterns.stream().anyMatch(pattern -> antPathMatcher.match(pattern, path));
    }

核心代码是这一行


excludePathPatterns.stream().anyMatch(pattern -> antPathMatcher.match(pattern, path))

获取到需要排除鉴权接口列表的接口,然后通过 AntPathMatcher 的 match 方法去匹配路径,不需要做鉴权的接口就会被匹配到,然后继续执行非鉴权的业务流程。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯