AntMatcher和MvcMatcher之间的区别

Jwo*_*Ker 9 spring spring-security

有什么区别HttpSecurityantMatcher()功能?

任何人都可以解释何时使用它们?

Dim*_*San 41

正如官方文档中明确说明的那样,该方法的签名也有说明-

antMatcher(String antPattern)- 允许配置HttpSecurity仅在匹配提供的蚂蚁模式时调用。

mvcMatcher(String mvcPattern)- 允许配置HttpSecurity仅在匹配提供的 Spring MVC 模式时调用。

通常mvcMatcherantMatcher. 举个例子:

  • antMatchers("/secured")只匹配确切的 /securedURL
  • mvcMatchers("/secured")匹配/secured以及/secured/, /secured.html,/secured.xyz

因此更通用,也可以处理一些可能的配置错误。

mvcMatcher使用 Spring MVC 用于匹配的相同规则(使用@RequestMapping注解时)。

如果当前请求不会被 Spring MVC 处理,则将使用将该模式用作蚂蚁模式的合理默认值。来源

它可以添加mvcMatchersAPI(因为4.1.1)是较新的antMatchersAPI(自3.1)。

  • > mvcMatcher 比 antMatcher 更安全 > 显示示例,mvcMatcher 可以匹配比您实际写下的更多的内容。我不了解你,但这显然是相反的 (7认同)
  • 听起来完全相反,但 mvcMatchers 更安全,因为它们可以匹配更多...例如,想象一下: `.mvcMatchers("/employee").hasRole("xyz").anyRequest().aunthenticated() 。 ..permitAll()`...如果您想访问员工资源并输入`/employee/`或`/employee.html`,mvcMatcher将匹配您的请求并通过身份验证进行过滤...antMatcher不会捕获` /employee/` 情况下,不会通过身份验证过滤请求,并且可以利用资源...DispatcherServlet 将服务器请求..这只是一个安全过滤... (3认同)
  • 我还想看一下这个视频:https://youtu.be/WsH8qn8hjgE 它很好地演示了单个斜杠如何破坏 antMatchers,而 mvcMatchers 能够捕获它。 (2认同)

Gre*_*Nun 5

AntMatcher()是 Ant 风格路径模式的实现。这个映射代码的一部分是从 Apache Ant 借来的。

MvcMatcher()使用 Spring MVCHandlerMappingIntrospector来匹配路径并提取变量。

所以它们都实现了RequestMatcher接口,但在引擎盖下使用了不同的表达语言。


Pur*_* CK 5

antMatcher("/users/**") matches any path starting with /users
antMatchers("/users") matches only the exact /users URL
mvcMatchers("/users") matches /users, /users/, /users.html

public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
  .authorizeRequests()
  .antMatchers("/users/movie/**") // matches any path starting with /users/movie
  .hasRole("ADMIN") ...
  }
}
Run Code Online (Sandbox Code Playgroud)