FilterRegistrationBean url 模式不起作用

rla*_*d9k 2 java spring spring-security spring-boot

我正在注册一个过滤器,如下所示用于日志输出

我想要网址模式:/*/api/*


@Bean
public CommonsRequestLoggingFilter commonsRequestLoggingFilter() {
    CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
    filter.setIncludeClientInfo(true);
    filter.setIncludeHeaders(true);
    filter.setIncludePayload(true);
    filter.setIncludeQueryString(true);
    filter.setMaxPayloadLength(1000);
    return filter;
}


     @Bean
    public FilterRegistrationBean filterRegistrationBean () {
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.addUrlPatterns("/*/api/*");

        return registrationBean;
    }
Run Code Online (Sandbox Code Playgroud)

And*_*eas 7

由于代码注册了 Servlet Filter,因此 URL 模式必须符合 Servlet/Filters 支持的 URL 映射,如 Servlet 规范中所指定:

\n
\n

12.2 映射规范

\n

在 Web 应用程序部署描述符中,使用以下语法来定义映射:

\n
    \n
  • 以字符开头/并以/*后缀结尾的字符串用于路径映射。

    \n
  • \n
  • 以前缀开头的字符串*.用作扩展映射。

    \n
  • \n
  • 空字符串 ("") 是一种特殊的 URL 模式,它精确映射到应用程序的上下文根,即表单的请求http://host:port/<context-root>/。在本例中,路径信息为/,servlet 路径和上下文路径为空字符串 (\xe2\x80\x9c\xe2\x80\x9c)。

    \n
  • \n
  • 仅包含该字符的字符串/表示应用程序的“默认”servlet。在这种情况下,Servlet 路径是请求 URI 减去上下文路径,并且路径信息为空。

    \n
  • \n
  • 所有其他字符串仅用于精确匹配。

    \n
  • \n
\n
\n

因此,一个 URL 只能有一个通配符,并且它必须是第一个或最后一个:

\n
    \n
  • /some/path/*
  • \n
  • *.ext
  • \n
\n