java - Spring 安全 : How to use multiple URL patterns in FilterRegistrationBean?

标签 java spring spring-security servlet-filters

我有一颗 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/

相关文章:

java - DataAccessException 无法转换为 SQLException 以获取错误代码和 sql 状态

java - 创建名称为 'entityManagerFactory' : [PersistenceUnit: default] Unable to build Hibernate SessionFactory 的 bean 时出错

java - Spring 启动 : Customize API response based on the User Roles

spring-boot - 如何禁用 Spring Security 的登录屏幕?

java - 删除元素 vector java

java - java中的线程/同步

java - ThreadPoolExecutor 应用程序未完成

java - JPA Criteria 通过子查询查询 GROUP 和 COUNT

grails - Grails Spring 开关用户

java - Android Studio 无法解析符号 ITelephony