You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2021/01/26 11:12:54 UTC

[pulsar] 01/02: Fix interceptor disabled in ResponseHandlerFilter.java (#9252)

This is an automated email from the ASF dual-hosted git repository.

penghui pushed a commit to branch branch-2.7
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 094643b652561b1347339e2cca90bc0d47ac2dc3
Author: lipenghui <pe...@apache.org>
AuthorDate: Thu Jan 21 15:16:06 2021 +0800

    Fix interceptor disabled in ResponseHandlerFilter.java (#9252)
    
    ### Motivation
    
    Fix interceptor disabled in ResponseHandlerFilter.java
    
    ### Verifying this change
    
    New unit test added.
    
    (cherry picked from commit de7b59d784f5e54b0031f524b08f2f03ca88e2ca)
---
 .../pulsar/broker/web/ResponseHandlerFilter.java   |  3 ++-
 .../broker/intercept/InterceptFilterOutTest.java   | 26 ++++++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java
index d7d16f9..9091d05 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java
@@ -66,7 +66,8 @@ public class ResponseHandlerFilter implements Filter {
                 /* connection is already invalidated */
             }
         }
-        if (!StringUtils.containsIgnoreCase(request.getContentType(), MediaType.MULTIPART_FORM_DATA)
+        if (interceptorEnabled
+                && !StringUtils.containsIgnoreCase(request.getContentType(), MediaType.MULTIPART_FORM_DATA)
                 && !StringUtils.containsIgnoreCase(request.getContentType(), MediaType.APPLICATION_OCTET_STREAM)) {
             interceptor.onWebserviceResponse(request, response);
         }
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/InterceptFilterOutTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/InterceptFilterOutTest.java
index 53c5463..fd13409 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/InterceptFilterOutTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/InterceptFilterOutTest.java
@@ -110,6 +110,32 @@ public class InterceptFilterOutTest {
         }
     }
 
+    @Test
+    public void testShouldNotInterceptWhenInterceptorDisabled() throws Exception {
+        CounterBrokerInterceptor interceptor = new CounterBrokerInterceptor();
+        PulsarService pulsarService = Mockito.mock(PulsarService.class);
+        Mockito.doReturn("pulsar://127.0.0.1:6650").when(pulsarService).getAdvertisedAddress();
+        Mockito.doReturn(interceptor).when(pulsarService).getBrokerInterceptor();
+        ServiceConfiguration conf = Mockito.mock(ServiceConfiguration.class);
+        // Disable the broker interceptor
+        Mockito.doReturn(Sets.newHashSet()).when(conf).getBrokerInterceptors();
+        Mockito.doReturn(conf).when(pulsarService).getConfig();
+        ResponseHandlerFilter filter = new ResponseHandlerFilter(pulsarService);
+
+        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+        HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
+        FilterChain chain = Mockito.mock(FilterChain.class);
+        Mockito.doNothing().when(chain).doFilter(Mockito.any(), Mockito.any());
+        HttpServletRequestWrapper mockInputStream = new MockRequestWrapper(request);
+        Mockito.doReturn(mockInputStream.getInputStream()).when(request).getInputStream();
+        Mockito.doReturn(new StringBuffer("http://127.0.0.1:8080")).when(request).getRequestURL();
+
+        // Should not be intercepted since the broker interceptor disabled.
+        Mockito.doReturn("application/json").when(request).getContentType();
+        filter.doFilter(request, response, chain);
+        Assert.assertEquals(interceptor.getCount(), 0);
+    }
+
     private static class MockRequestWrapper extends HttpServletRequestWrapper {
 
         public MockRequestWrapper(HttpServletRequest request) {