咱們常常在讀到一些文章會遇到uri
支持 Ant
風格 ,並且這個東西在 Spring MVC 和 Spring Security 中常常被說起。這究竟是什麼呢?今天咱們來學習瞭解一下。這對咱們學習 Spring MVC 和 Spring Security 十分必要。html
說白了 Ant
風格就是一種路徑匹配表達式。主要用來對uri
的匹配。其實跟正則表達式做用是同樣的,只不過正則表達式適用面更加寬泛,Ant
僅僅用於路徑匹配。java
Ant
中的通配符有三種:正則表達式
?
匹配任何單字符*
匹配0或者任意數量的 字符 **
匹配0或者更多的 目錄 這裏注意了單個*
是在一個目錄內進行匹配。 而**
是能夠匹配多個目錄,必定不要迷糊。app
通配符 | 示例 | 說明 |
---|---|---|
? |
/ant/p?ttern |
匹配項目根路徑下 /ant/pattern 和 /ant/pXttern ,可是不包括/ant/pttern |
* |
/ant/*.html |
匹配項目根路徑下全部在ant 路徑下的.html 文件 |
* |
/ant/*/path |
/ant/path 、/ant/a/path 、/ant/bxx/path 都匹配,不匹配 /ant/axx/bxx/path |
** |
/ant/**/path |
/ant/path 、/ant/a/path 、/ant/bxx/path 、/ant/axx/bxx/path 都匹配 |
從 3.1 能夠看出 *
和 **
是有衝突的狀況存在的。爲了解決這種衝突就規定了最長匹配原則(has more characters)。 一旦一個uri
同時符合兩個Ant
匹配那麼走匹配規則字符最多的。爲何走最長?由於字符越長信息越多就越具體。好比 /ant/a/path
同時知足 /**/path
和 /ant/*/path
那麼走/ant/*/path
ide
接下來咱們來看看 Spring MVC 和 Spring Security 下的 Ant
風格。學習
這裏也提一下在 Spring MVC 中 咱們在控制器中寫以下接口:ui
/** * ant style test. * * @return the string */ @GetMapping("/?ant") public String ant() { return "ant"; }
你使用任意合法uri
字符替代?
發現均可以匹配,好比/bant
。 還有Spring MVC 的一些 過濾器註冊、格式化器註冊都用到了 Ant
風格。spa
在 Spring Security 中 WebSecurityConfigurerAdapter
中的你能夠經過以下配置進行路由權限訪問控制:code
public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { authenticationManagerBuilder.inMemoryAuthentication().withUser("admin").password("admin").roles("USER"); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() //放行靜態資源 首頁 .antMatchers("/index.html","/static/**").permitAll() .anyRequest().authenticated(); } }
上面 Spring Security 的配置中在 antMatchers
方法中經過 Ant
通配符來控制了資源的訪問權限。 後面我也會出相關的教程,敬請關注公衆號:Felordcn 和我的博客:https://felord.cnhtm
Ant
風格總體東西很少,也很好理解。 不少關於uri
的配置、路由匹配、處理都用到了 Ant
風格 。對於 Web 開發人員來講是必須掌握的技能之一。
關注公衆號:Felordcn獲取更多資訊