欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年09月08日 10:37:08   作者:安迪源文  
這篇文章主要介紹了Spring概念模型:PathMatcher 路徑匹配器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

源代碼版本 : 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框架自身對概念模型接口也提供了一個缺省的實現(xiàn)AntPathMatcher,用于匹配Ant風格的路徑。

PathMatcher接口源代碼

PathMatcher接口源代碼如下 :

package org.springframework.util;
import java.util.Comparator;
import java.util.Map;
public interface PathMatcher {
	/**
	 * Does the given path represent a pattern that can be matched
	 * by an implementation of this interface?
	 * 判斷指定的路徑 path 是否是一個 pattern(模式)
	 * 如果返回值是 false,也就是說 path 不是一個模式,而是一個靜態(tài)路徑(真正的路徑字符串),
	 * 那么就不用調(diào)用方法 #match 了,因為對于靜態(tài)路徑的匹配,直接使用字符串等號比較就足夠了。
	 * @param path the path String to check
	 * @return true if the given path represents a pattern
	 */
	boolean isPattern(String path);
	/**
	 * Match the given path against the given pattern,
	 * according to this PathMatcher's matching strategy.
	 * 根據(jù)當前 PathMatcher 的匹配策略,檢查指定的徑 path 和指定的模式 pattern 是否匹配
	 * @param 用于檢測路徑字符串是否匹配于某個模式時所用的模式
	 * @param path 需要被檢測的路徑字符串
	 * @return true 表示匹配, false 表示不匹配
	 */
	boolean match(String pattern, String path);
	/**
	 * Match the given  path against the corresponding part of the given
	 * pattern, according to this PathMatcher's matching strategy.
	 * 根據(jù)當前 PathMatcher 的匹配策略,檢查指定的徑 path 和指定的模式 pattern 是否之間
	 * 是否為前綴匹配
	 * @param pattern the pattern to match against
	 * @param path the path String to test
	 * @return true 表示匹配, false 表示不匹配
	 */
	boolean matchStart(String pattern, String path);
	/**
	 * Given a pattern and a full path, determine the pattern-mapped part.
	 * 給定一個模式 pattern 和一個全路徑 path,判斷路徑中和模式匹配的部分。
     *
	 * This method is supposed to find out which part of the path is matched
	 * dynamically through an actual pattern, that is, it strips off a statically
	 * defined leading path from the given full path, returning only the actually
	 * pattern-matched part of the path.
	 * 該方法用于發(fā)現(xiàn)路徑中的哪一部分是和模式能動態(tài)匹配上的部分。它會去除路徑中開頭靜態(tài)部分,
	 * 僅僅返回那部分真正和模式匹配的上的部分。
	 * 例子 : "myroot/*.html" 為 pattern , "myroot/myfile.html" 為路徑,
	 *  則該方法返回 "myfile.html".  
	 * 具體的檢測規(guī)則根據(jù)當前 PathMatcher 的匹配策略來頂。	
	 * A simple implementation may return the given full path as-is in case
	 * of an actual pattern, and the empty String in case of the pattern not
	 * containing any dynamic parts (i.e. the pattern parameter being
	 * a static path that wouldn't qualify as an actual #isPattern pattern.
	 * A sophisticated implementation will differentiate between the static parts
	 * and the dynamic parts of the given path pattern.
	 * @param pattern the path pattern
	 * @param path the full path to introspect
	 * @return the pattern-mapped part of the given path
	 * (never null)
	 */
	String extractPathWithinPattern(String pattern, String path);
	/**
	 * Given a pattern and a full path, extract the URI template variables. URI template
	 * variables are expressed through curly brackets ('{' and '}').
	 * 給定一個模式和一個路徑,提取其中的 URI 模板變量信息。URI模板變量表達式格式為 "{variable}"
	 *      
	 * 例子 : pattern  為 "/hotels/{hotel}" ,路徑為 "/hotels/1", 則該方法會返回一個 map ,
     * 內(nèi)容為 : "hotel"->"1".
	 * @param pattern the path pattern, possibly containing URI templates
	 * @param path the full path to extract template variables from
	 * @return a map, containing variable names as keys; variables values as values
	 */
	Map<String, String> extractUriTemplateVariables(String pattern, String path);
	/**
	 * Given a full path, returns a Comparator suitable for sorting patterns
	 * in order of explicitness for that path.
	 * The full algorithm used depends on the underlying implementation,
	 * but generally, the returned Comparator will sort a list so that more 
     * specific patterns come before generic patterns.
	 * @param path the full path to use for comparison
	 * @return a comparator capable of sorting patterns in order of explicitness
	 */
	Comparator<String> getPatternComparator(String path);
	/**
	 * Combines two patterns into a new pattern that is returned.
	 * The full algorithm used for combining the two pattern depends on the underlying implementation.
	 * 合并兩個模式。具體合并的算法由實現(xiàn)類決定。
	 * @param pattern1 the first pattern
	 * @param pattern2 the second pattern
	 * @return the combination of the two patterns
	 * @throws IllegalArgumentException when the two patterns cannot be combined
	 */
	String combine(String pattern1, String pattern2);
}

從接口代碼來理解概念還是有些抽象,下面我們列舉一些基于實現(xiàn)類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();

以下代碼為本人使用過的路徑匹配工具代碼

方便以后項目中使用參考:

//不需要鑒權(quán)的接口
    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))

獲取到需要排除鑒權(quán)接口列表的接口,然后通過 AntPathMatcher 的 match 方法去匹配路徑,不需要做鑒權(quán)的接口就會被匹配到,然后繼續(xù)執(zhí)行非鑒權(quán)的業(yè)務流程。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java微信支付之服務號支付代碼示例

    Java微信支付之服務號支付代碼示例

    這篇文章主要介紹了Java微信支付之服務號支付代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 詳解Spring基于xml的兩種依賴注入方式

    詳解Spring基于xml的兩種依賴注入方式

    這篇文章主要介紹了詳解Spring基于xml的兩種依賴注入方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Java使用Jdom讀取xml解析實例

    Java使用Jdom讀取xml解析實例

    這篇文章主要介紹了Java使用Jdom讀取xml解析,以實例形式較為詳細的分析了Jdom操作XML文件實現(xiàn)讀取操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Java中注解與原理分析詳解

    Java中注解與原理分析詳解

    注解即標注與解析,在Java的代碼工程中,注解的使用幾乎是無處不在,甚至多到被忽視。本文就來和大家詳細說說Java中注解的原理與實現(xiàn),需要的可以參考一下
    2022-11-11
  • Java方法參數(shù)傳遞機制原理解析

    Java方法參數(shù)傳遞機制原理解析

    這篇文章主要介紹了Java方法參數(shù)傳遞機制原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Springboot分模塊項目搭建的實現(xiàn)

    Springboot分模塊項目搭建的實現(xiàn)

    在軟件開發(fā)中,利用Spring?Boot進行分模塊項目搭建能夠提高代碼的模塊化和復用性,本文主要介紹了Springboot分模塊項目搭建的實現(xiàn),感興趣的可以了解一下
    2024-10-10
  • SpringBoot中web模板渲染的實現(xiàn)

    SpringBoot中web模板渲染的實現(xiàn)

    本文主要介紹了SpringBoot中web模板渲染的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • java實現(xiàn)拼圖小游戲

    java實現(xiàn)拼圖小游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • java 異常之手動拋出與自動拋出的實例講解

    java 異常之手動拋出與自動拋出的實例講解

    這篇文章主要介紹了java 異常之手動拋出與自動拋出的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java?agent的入門與demo演示詳解

    Java?agent的入門與demo演示詳解

    Java?Agent?是?Java?1.5?版本之后引?的特性,其主要作?是在class被加載之前對其攔截,這篇文章主要介紹了agent的簡單使用,需要的可以參考下
    2023-05-05

最新評論