![](/img/trans.png)
[英]FilterRegistrationBean necessary to enable CORS support with Spring Security?
[英]Spring Security: How to use multiple URL patterns in FilterRegistrationBean?
我有一顆豆
@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/**
)?
聚苯乙烯
我嘗試使用下一個模式組合:
1) /api/cat, /api/cat**, /api/dog
2) /api/cat, /api/cat/**, /api/dog
3) /api/cat**, /api/dog
正如@Tarun Lalwani 所提到的,您需要使用*
而不是**
,因為在這種情況下**
不是有效的網址模式。
在您的情況下,請嘗試以下操作:
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/this
但匹配/api/this
/api/not/that
的/api/*
行為,則需要使用以下模式: /api/*/
。
如果您查看文檔
當未指定 URL 模式或 servlet 時,過濾器將關聯到“/*”
如您所見, *
是spring
使用的模式,而不是**
。 **
通常是bash
和golang
使用的 glob。 但是 spring 只使用*
。 所以你需要的只是
registration.addUrlPatterns(
"/api/cat",
"/api/cat/*",
"/api/dog",
"/api/dog/*"
);
**
模式通常用於安全過濾器
<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>
我的問題是:在每個端點調用中都會調用過濾器,忽略我設置的模式:
myBean.setUrlPatterns(Arrays.asList("/cat/*","/dog/*","/serpent/*"));
我在 @SpringBootApplication 類中創建了 bean。
所以如果我調用 http://server/api/animal/elephant 過濾器被命中,我不認為這是預期的行為,因為我已經設置了 url 模式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.