Spring Security:如何在FilterRegistrationBean中使用多种URL模式?

我有一个豆子

@Bean
public FilterRegistrationBean animalsFilterRegistration() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new AnimalsFilter());
    registration.addUrlPatterns(
        "/api/cat",
        "/api/cat/**",
        "/api/dog"
    );
    ...
    return registration;
}

在该bean中,我对URL使用两种模式。问题是,当我尝试使用复杂的后缀()调用端点时,我的过滤器不会拦截请求。但是当我调用和终结点时,这是可以的 - 过滤器按预期工作并拦截请求。/api/cat**/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

答案 1

正如@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/*/


答案 2

如果您查看文档

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/api/org/springframework/boot/web/servlet/FilterRegistrationBean.html

如果未指定 URL 模式或 servlet,则过滤器将关联到“/*”

如您所见,是 使用的模式,而不是 。 通常是 、 使用的球形。但春天只使用。所以你需要的只是*spring****bashgolang*

registration.addUrlPatterns(
        "/api/cat",
        "/api/cat/*",
        "/api/dog",
        "/api/dog/*"
    );

这些模式通常用于安全筛选器**

https://docs.spring.io/spring-security/site/docs/current/reference/html/security-filter-chain.html#filter-chain-proxy

<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>

推荐