Ale*_*lex 12 java spring spring-security servlet-filters
我有一个豆子
@Bean
public FilterRegistrationBean animalsFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new AnimalsFilter());
registration.addUrlPatterns(
"/api/cat",
"/api/cat/**",
"/api/dog"
);
...
return registration;
}
Run Code Online (Sandbox Code Playgroud)
在那个bean中,我使用了两种/api/cat**URL 模式.问题是,当我尝试使用复杂的postfix(/api/cat/1/feed)调用端点时,我的过滤器不会拦截请求.但是当我调用/api/cat和/api/got端点时它是可以的- 过滤器按预期工作并拦截请求.
如何为我的案例(/api/cat,/api/cat/**)使用多个URL模式?
PS
我试图使用下一个模式组合:
1) /api/cat, /api/cat**, /api/dog
2) /api/cat, /api/cat/**, /api/dog
3) /api/cat**, /api/dog
Run Code Online (Sandbox Code Playgroud)
正如@Tarun Lalwani所提到的,你需要使用*而不是**,因为**在这种情况下它不是一个有效的url模式.
在您的情况下,请尝试以下操作:
registration.addUrlPatterns(
"/api/cat",
"/api/cat/*",
"/api/dog",
"/api/dog/*"
);
Run Code Online (Sandbox Code Playgroud)
那些将匹配/api/cat/1,/api/cat/1/feed,/api/dog/1,/api/dog/1/feed,...
如果要复制/api/*,将只匹配的行为/api/this,但是/api/not/that,那么你就需要使用以下模式:/api/*/.
如果你看一下文档
如果未指定URL模式或servlet,则过滤器将与"/*"关联
正如你所看到的*是使用的模式spring,而不是**.**通常由使用的水珠bash,golang.但春天*只使用.所以你需要的只是
registration.addUrlPatterns(
"/api/cat",
"/api/cat/*",
"/api/dog",
"/api/dog/*"
);
Run Code Online (Sandbox Code Playgroud)
这些**模式通常用于安全过滤器
<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
<constructor-arg>
<list>
<sec:filter-chain pattern="/restful/**" filters="
securityContextPersistenceFilterWithASCFalse,
basicAuthenticationFilter,
exceptionTranslationFilter,
filterSecurityInterceptor" />
<sec:filter-chain pattern="/**" filters="
securityContextPersistenceFilterWithASCTrue,
formLoginFilter,
exceptionTranslationFilter,
filterSecurityInterceptor" />
</list>
</constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3089 次 |
| 最近记录: |