私は豆を持っています
@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に2つのパターンを使用しています。問題は、複雑な接尾辞(/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
ドキュメントを見れば
URLパターンまたはサーブレットが指定されていない場合、フィルターは「/ *」に関連付けられます。
ご覧のとおり、*
はspring
によって使用されるパターンであり、**
ではありません。 **
は通常、bash
、golang
によって使用されるグロブです。ただし、春は*
のみを使用します。だからあなたが必要なのはただ
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>
@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/*/
。