Ant 风格的路径模式和 MVC 风格的路径模式是 Spring 框架中用于匹配 URL 路径的两种模式。它们各有不同的语法和用途,主要用于配置 Spring Security 和 Spring MVC 中的请求映射。
Ant 风格的路径模式
Ant 风格的路径模式使用 Ant 文件路径匹配语法来匹配 URL。常见的模式符号包括:
*
:匹配任意数量的字符(不包括路径分隔符/
)。- 例如:
/user/*
可以匹配/user/1
、/user/abc
,但不匹配/user/profile/1
。
- 例如:
**
:匹配任意数量的字符(包括路径分隔符/
)。- 例如:
/user/**
可以匹配/user/1
、/user/profile/1
、/user/profile/settings
。
- 例如:
?
:匹配一个字符。- 例如:
/user/??
可以匹配/user/ab
、/user/12
,但不匹配/user/a
或/user/abc
。
- 例如:
在 Spring Security 中,antMatchers
方法用于指定使用 Ant 风格的路径模式。例如:
java
http
.authorizeRequests()
.antMatchers("/public/**").permitAll() // 允许所有对 /public/ 及其子路径的访问
.antMatchers("/admin/*").hasRole("ADMIN") // 只允许具有 ADMIN 角色的用户访问 /admin/ 下的一层路径
.anyRequest().authenticated(); // 其他所有请求都需要进行身份验证
MVC 风格的路径模式
MVC 风格的路径模式使用 Spring MVC 的路径匹配语法来匹配 URL。它通常用于 Spring MVC 控制器的请求映射。常见的模式符号包括:
{}
:用于路径变量,占位符可以匹配任意路径段。- 例如:
/user/{id}
可以匹配/user/1
、/user/abc
,路径变量id
的值分别为1
和abc
。
- 例如:
*
:匹配任意数量的字符(不包括路径分隔符/
)。- 例如:
/user/*
可以匹配/user/1
、/user/abc
,但不匹配/user/profile/1
。
- 例如:
**
:匹配任意数量的字符(包括路径分隔符/
)。- 例如:
/user/**
可以匹配/user/1
、/user/profile/1
、/user/profile/settings
。
- 例如:
在 Spring Security 中,mvcMatchers
方法用于指定使用 MVC 风格的路径模式。例如:
java
http
.authorizeRequests()
.mvcMatchers("/user/{id}").hasRole("USER") // 只允许具有 USER 角色的用户访问 /user/ 下的路径,并匹配路径变量 {id}
.mvcMatchers("/public/**").permitAll() // 允许所有对 /public/ 及其子路径的访问
.anyRequest().authenticated(); // 其他所有请求都需要进行身份验证
总结
- Ant 风格的路径模式 :使用
*
、**
和?
等符号来匹配 URL 路径,主要用于文件路径匹配。 - MVC 风格的路径模式 :使用
{}
占位符来匹配路径变量,适用于 Spring MVC 控制器的请求映射。
选择使用哪种模式取决于具体的应用场景和需求。对于需要匹配复杂 URL 模式的场景,MVC 风格的路径模式更为灵活和强大。