/ 和 /* 路径匹配模式的区别

2025/8/24

/* 和 /** 的主要区别在于匹配的路径深度不同:

  1. /* 的匹配规则:
  • 只能匹配一级路径
  • 只匹配当前目录下的所有文件
  • 不能匹配子目录下的文件
  • 例如:/* 能匹配 /user, /home 等,但不能匹配 /user/list, /user/add/new 等多级路径
  1. /** 的匹配规则:
  • 能匹配多级路径
  • 匹配当前目录及其所有子目录下的所有文件
  • 例如:/** 能匹配 /user, /home, /user/list, /user/add/new 等所有路径

举个实际的例子:

// 使用 /* 的情况
@WebFilter("/*")
public class MyFilter implements Filter {
    // 只能拦截一级路径如 /user, /home
}

// 使用 /** 的情况
@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/**");  // 可以拦截所有路径,包括多级路径
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

实际应用建议:

  1. 在 Filter 中,如果想要拦截所有请求,建议使用 /*
  2. 在 Interceptor 中,如果想要拦截所有请求,建议使用 /**
  3. 如果只需要拦截特定层级的请求,可以根据实际需求选择 /* 或 /**

这种路径匹配方式遵循 Ant 风格的路径匹配规则,这是 Spring 框架采用的标准路径匹配方式。