当 management.port 与服务器端口不同时,如何调用 OncePerRequestFilter?

How make OncePerRequestFilter called when management.port is different from server port?

我有一个扩展 OncePerRequestFilter 的过滤器。当我使用 management.port=8081server.port=8080(或任何不同的端口)时,我的过滤器不会在任何 8081 Urls 上调用。

过滤器 在 8080 Urls 上调用。

如何在所有 Urls 上调用它,包括 8081 上的那些?

过滤器:

@Order( Ordered.LOWEST_PRECEDENCE )
public class TestFilter extends OncePerRequestFilter
{
    public TestFilter()
    {
        System.out.println( "Started" );
    }

    @Override
    protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException
    {
        System.out.println( "Checked should not filter" );
        return false;
    }

    @Override
    public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException
    {
        System.out.println( "Filtering" );

        // continue the processing
        filterChain.doFilter( request, response );
    }
}

我通过以下方式添加:

@Configuration
public class MyConfig
{
    @Bean
    public TestFilter testFilter()
    {
        return new TestFilter()
    }
}

编辑: 我尝试将 @ManagementContextConfiguration 添加到我的配置 class,但这也不起作用。

虽然我找不到文档,但答案似乎是执行以下全部

  1. 添加注释为 @ManagementContextConfiguration
  2. 的 class
  3. 将该配置文件放在组件扫描之外(这样spring引导的正常自动配置将找不到它)
  4. 在META-INF/spring中声明它.factories:

META-INF/spring.工厂:

在 spring-boot-2.0.0.RELEASE 之前:
org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration=com.packageoutsidescan.MyManagementFilterConfigurationClass

在spring-boot-2.0.0.RELEASE之后(web分包):

org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration=com.packageoutsidescan.MyManagementFilterConfigurationClass