我有一颗 bean
@Bean
public FilterRegistrationBean animalsFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new AnimalsFilter());
registration.addUrlPatterns(
"/api/cat",
"/api/cat/**",
"/api/dog"
);
...
return registration;
}
在那个 bean 中,我为 /api/cat**
URL 使用了两种模式。问题是当我尝试使用复杂的后缀 (/api/cat/1/feed
) 调用端点时,我的过滤器不会拦截请求。但是当我调用 /api/cat
和 /api/got
端点时没关系——过滤器按预期工作并拦截请求。
如何为我的案例使用多个 URL 模式(/api/cat
、/api/cat/**
)?
PS
我尝试使用下一个模式组合:
1) /api/cat, /api/cat**, /api/dog
2) /api/cat, /api/cat/**, /api/dog
3) /api/cat**, /api/dog
最佳答案
正如@Tarun Lalwani 所说,您需要使用 *
而不是 **
,因为 **
不是有效的 url 模式在这种情况下。
在您的情况下,请尝试以下操作:
registration.addUrlPatterns(
"/api/cat",
"/api/cat/*",
"/api/dog",
"/api/dog/*"
);
那些将匹配 /api/cat/1
、/api/cat/1/feed
、/api/dog/1
、 /api/dog/1/feed
, ...
如果你想复制 /api/*
行为,只匹配 /api/this
但 /api/not/that
,那么你需要使用如下模式:/api/*/
.
关于java - Spring 安全 : How to use multiple URL patterns in FilterRegistrationBean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44769047/