当 management.port 与服务器端口不同时,如何调用 OncePerRequestFilter?
How make OncePerRequestFilter called when management.port is different from server port?
我有一个扩展 OncePerRequestFilter
的过滤器。当我使用 management.port=8081
和 server.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,但这也不起作用。
虽然我找不到文档,但答案似乎是执行以下全部:
- 添加注释为
@ManagementContextConfiguration
的 class
- 将该配置文件放在组件扫描之外(这样spring引导的正常自动配置将找不到它)
- 在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
我有一个扩展 OncePerRequestFilter
的过滤器。当我使用 management.port=8081
和 server.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,但这也不起作用。
虽然我找不到文档,但答案似乎是执行以下全部:
- 添加注释为
@ManagementContextConfiguration
的 class
- 将该配置文件放在组件扫描之外(这样spring引导的正常自动配置将找不到它)
- 在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