/ 和 /* 路径匹配模式的区别
maiaimei 2025/8/24
/* 和 /** 的主要区别在于匹配的路径深度不同:
- /* 的匹配规则:
- 只能匹配一级路径
- 只匹配当前目录下的所有文件
- 不能匹配子目录下的文件
- 例如:/* 能匹配 /user, /home 等,但不能匹配 /user/list, /user/add/new 等多级路径
- /** 的匹配规则:
- 能匹配多级路径
- 匹配当前目录及其所有子目录下的所有文件
- 例如:/** 能匹配 /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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
实际应用建议:
- 在 Filter 中,如果想要拦截所有请求,建议使用 /*
- 在 Interceptor 中,如果想要拦截所有请求,建议使用 /**
- 如果只需要拦截特定层级的请求,可以根据实际需求选择 /* 或 /**
这种路径匹配方式遵循 Ant 风格的路径匹配规则,这是 Spring 框架采用的标准路径匹配方式。