InterceptorRegistration中addPathPatterns和excludePathPatterns不冲突吗
时间: 2024-05-28 09:13:23 浏览: 110
在Spring框架中,InterceptorRegistration中的addPathPatterns和excludePathPatterns并不会冲突。这是因为addPathPatterns是用来指定需要拦截的请求路径,而excludePathPatterns则是用来指定不需要拦截的请求路径。当一个请求进入拦截器时,首先会判断该请求的路径是否在excludePathPatterns中,如果在,则不会被拦截器拦截;如果不在,则继续判断该请求的路径是否在addPathPatterns中,如果在,则会被拦截器拦截;如果不在,则不会被拦截器拦截。因此,addPathPatterns和excludePathPatterns是互补的,不会产生冲突。
相关问题
InterceptorRegistration中addPathPatterns和excludePathPatterns使用中注意事项
在使用 InterceptorRegistration 中的 addPathPatterns 和 excludePathPatterns 时,需要注意以下几点:
1. addPathPatterns 和 excludePathPatterns 的参数都是字符串数组,可以传入多个路径模式。路径模式可以使用 Ant 风格的通配符,例如 "/api/**" 表示匹配所有以 /api/ 开头的请求路径。
2. addPathPatterns 指定拦截的请求路径,excludePathPatterns 指定排除的请求路径。如果一个请求同时匹配 addPathPatterns 和 excludePathPatterns,excludePathPatterns 的优先级更高,该请求将不会被拦截。
3. 如果 addPathPatterns 和 excludePathPatterns 都没有指定任何路径模式,则该拦截器将会对所有请求生效。
4. 如果 addPathPatterns 和 excludePathPatterns 都指定了路径模式,则只有同时匹配 addPathPatterns 和不匹配 excludePathPatterns 的请求才会被拦截。
例如,下面的代码指定了一个拦截器,它将会对所有以 /api/ 开头的请求进行拦截,但是排除了 /api/login 和 /api/logout 这两个请求:
```
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthInterceptor())
.addPathPatterns("/api/**")
.excludePathPatterns("/api/login", "/api/logout");
}
}
```
希望这些注意事项能够帮助你正确地使用 InterceptorRegistration 中的 addPathPatterns 和 excludePathPatterns。
InterceptorRegistration中addPathPatterns和excludePathPatterns使用先后顺序的区别
InterceptorRegistration 中的 `addPathPatterns` 和 `excludePathPatterns` 是用来指定哪些请求需要拦截,哪些请求不需要拦截的。它们的区别在于:
- `addPathPatterns`:指定需要拦截的请求路径,只有匹配上该路径的请求才会被拦截。
- `excludePathPatterns`:指定不需要拦截的请求路径,匹配上该路径的请求不会被拦截。
这两个方法的执行顺序是先执行 `addPathPatterns`,再执行 `excludePathPatterns`。因此,如果同一个请求路径既匹配了 `addPathPatterns`,又匹配了 `excludePathPatterns`,那么最终的结果是不拦截该请求。
举个例子,假设有以下配置:
```java
registry.addInterceptor(myInterceptor)
.addPathPatterns("/api/**")
.excludePathPatterns("/api/login");
```
上述配置表示拦截 `/api/**` 路径下的所有请求,但排除了 `/api/login` 请求。因此,请求 `/api/login` 不会被拦截,其他 `/api/**` 路径下的请求都会被拦截。注意,如果把 `excludePathPatterns` 配置放在 `addPathPatterns` 前面,那么 `/api/login` 请求就会被拦截了,这是因为 `excludePathPatterns` 的优先级更高。
阅读全文