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

guangning pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-manager.git


The following commit(s) were added to refs/heads/master by this push:
     new c3ebbd1  Added JWT Token Support (#203)
c3ebbd1 is described below

commit c3ebbd1b39b0e7a1bee2403c6513641cb55e1eac
Author: Yuvaraj L <uvar...@gmail.com>
AuthorDate: Fri Oct 25 11:28:30 2019 +0530

    Added JWT Token Support (#203)
    
    * Added JWT Token Authentication Support Upgraded Spring and gradle to 
4.10.2
    
    * Added pulsarJwtToken to Test Cases
    
    * Send token only when configured
    
    * Fixed License header formatting
    
    Signed-off-by: Yuvaraj Loganathan <uvar...@gmail.com>
    
    * Reverted Spring & gradle upgrade
    Will raise an separate pull request for the upgrade
    
    Signed-off-by: Yuvaraj Loganathan <uvar...@gmail.com>
    
    * Reverted Gradle Version
    
    Signed-off-by: Yuvaraj Loganathan <uvar...@gmail.com>
---
 .gitignore                                                |  2 ++
 front-end/src/utils/request.js                            |  2 +-
 .../pulsar/manager/controller/EnvironmentsController.java | 11 +++++++++++
 .../pulsar/manager/service/impl/BookiesServiceImpl.java   |  8 ++++++++
 .../manager/service/impl/BrokerStatsServiceImpl.java      | 15 ++++++++++++++-
 .../pulsar/manager/service/impl/BrokersServiceImpl.java   |  7 +++++++
 .../pulsar/manager/service/impl/ClustersServiceImpl.java  |  8 ++++++++
 .../manager/service/impl/EnvironmentCacheServiceImpl.java |  7 +++++++
 .../manager/service/impl/NamespacesServiceImpl.java       |  7 +++++++
 .../pulsar/manager/service/impl/TenantsServiceImpl.java   |  7 +++++++
 .../pulsar/manager/service/impl/TopicsServiceImpl.java    |  7 +++++++
 .../pulsar/manager/zuul/EnvironmentForward.java           |  8 ++++++--
 src/main/resources/application.properties                 |  6 +++++-
 .../pulsar/manager/service/BookiesServiceImplTest.java    |  8 ++++++++
 .../manager/service/BrokerStatsServiceImplTest.java       |  8 ++++++++
 .../pulsar/manager/service/BrokersServiceImplTest.java    | 10 ++++++++++
 .../pulsar/manager/service/ClustersServiceImplTest.java   |  8 ++++++++
 .../pulsar/manager/service/NamespacesServiceImplTest.java | 11 +++++++++++
 .../pulsar/manager/service/TenantsServiceImplTest.java    |  8 ++++++++
 .../pulsar/manager/service/TopicsServiceImplTest.java     | 11 +++++++++++
 20 files changed, 154 insertions(+), 5 deletions(-)

diff --git a/.gitignore b/.gitignore
index a892a4f..5b37fc9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,3 +45,5 @@ build/
 front-end/data/
 *.log
 dbdata
+src/main/resources/local.properties
+
diff --git a/front-end/src/utils/request.js b/front-end/src/utils/request.js
index df7d81f..dcbe922 100644
--- a/front-end/src/utils/request.js
+++ b/front-end/src/utils/request.js
@@ -22,7 +22,7 @@ import router from '../router'
 // create an axios instance
 const service = axios.create({
   baseURL: process.env.BASE_API, // api 的 base_url
-  timeout: 5000 // request timeout
+  timeout: 60000 // request timeout
 })
 
 // request interceptor
diff --git 
a/src/main/java/io/streamnative/pulsar/manager/controller/EnvironmentsController.java
 
b/src/main/java/io/streamnative/pulsar/manager/controller/EnvironmentsController.java
index 49d92e5..d7dea7f 100644
--- 
a/src/main/java/io/streamnative/pulsar/manager/controller/EnvironmentsController.java
+++ 
b/src/main/java/io/streamnative/pulsar/manager/controller/EnvironmentsController.java
@@ -24,8 +24,10 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
+import org.apache.commons.lang3.StringUtils;
 import org.hibernate.validator.constraints.Range;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.ResponseEntity;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -50,6 +52,9 @@ public class EnvironmentsController {
     @Autowired
     private EnvironmentsRepository environmentsRepository;
 
+    @Value("${backend.jwt.token}")
+    private String pulsarJwtToken;
+
     @Autowired
     private EnvironmentCacheService environmentCacheService;
 
@@ -102,6 +107,9 @@ public class EnvironmentsController {
         }
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         String httpTestResult = HttpUtil.doGet(environmentEntity.getBroker() + 
"/metrics", header);
         if (httpTestResult == null) {
             result.put("error", "This environment is error. Please check it");
@@ -129,6 +137,9 @@ public class EnvironmentsController {
         }
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         String httpTestResult = HttpUtil.doGet(environmentEntity.getBroker() + 
"/metrics", header);
         if (httpTestResult == null) {
             result.put("error", "This environment is error. Please check it");
diff --git 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/BookiesServiceImpl.java
 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/BookiesServiceImpl.java
index 690f916..49e195c 100644
--- 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/BookiesServiceImpl.java
+++ 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/BookiesServiceImpl.java
@@ -18,6 +18,7 @@ import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
 import io.streamnative.pulsar.manager.service.BookiesService;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -44,8 +45,12 @@ public class BookiesServiceImpl implements BookiesService {
     @Value("${bookie.enable}")
     private Boolean bookieEnable;
 
+    @Value("${backend.jwt.token}")
+    private static String pulsarJwtToken;
+
     private static final Map<String, String> header = new HashMap<String, 
String>(){{
         put("Content-Type","application/json");
+        put("Authorization", String.format("Bearer %s", pulsarJwtToken));
     }};
 
     private final Pattern pattern = Pattern.compile(" \\d+");;
@@ -57,6 +62,9 @@ public class BookiesServiceImpl implements BookiesService {
             Gson gson = new Gson();
             Map<String, String> header = Maps.newHashMap();
             header.put("Content-Type", "application/json");
+            if (StringUtils.isNotBlank(pulsarJwtToken)) {
+                header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+            }
             String rwBookieList = HttpUtil.doGet(
                     bookieHost + 
"/api/v1/bookie/list_bookies?type=rw&print_hostnames=true", header);
             Map<String, String> rwBookies = gson.fromJson(
diff --git 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
index 10ac073..c328e4f 100644
--- 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
+++ 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
@@ -38,6 +38,8 @@ import 
io.streamnative.pulsar.manager.entity.TopicsStatsRepository;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -61,6 +63,9 @@ public class BrokerStatsServiceImpl implements 
BrokerStatsService {
     @Value("${backend.directRequestHost}")
     private String directRequestHost;
 
+    @Value("${backend.jwt.token}")
+    private String pulsarJwtToken;
+
     @Value("${clear.stats.interval}")
     private Long clearStatsInterval;
 
@@ -96,13 +101,18 @@ public class BrokerStatsServiceImpl implements 
BrokerStatsService {
     }};
 
     public String forwarBrokerStatsMetrics(String broker, String requestHost) {
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
 
         broker = checkServiceUrl(broker, requestHost);
         return HttpUtil.doGet(broker + "/admin/v2/broker-stats/metrics", 
header);
     }
 
     public String forwardBrokerStatsTopics(String broker, String requestHost) {
-
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         broker = checkServiceUrl(broker, requestHost);
         return HttpUtil.doGet(broker + "/admin/v2/broker-stats/topics", 
header);
     }
@@ -134,6 +144,9 @@ public class BrokerStatsServiceImpl implements 
BrokerStatsService {
     }
 
     public void collectStatsToDB(long unixTime, String env, String cluster, 
String serviceUrl) {
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         Map<String, Object> brokerObject = brokersService.getBrokersList(0, 0, 
cluster, serviceUrl);
         List<HashMap<String, Object>> brokerLists = (List<HashMap<String, 
Object>>) brokerObject.get("data");
         brokerLists.forEach((brokerMap) -> {
diff --git 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokersServiceImpl.java
 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokersServiceImpl.java
index e8a2cc6..cd6496f 100644
--- 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokersServiceImpl.java
+++ 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokersServiceImpl.java
@@ -18,6 +18,7 @@ import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
 import io.streamnative.pulsar.manager.service.BrokersService;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -31,6 +32,9 @@ public class BrokersServiceImpl implements BrokersService {
     @Value("${backend.directRequestBroker}")
     private boolean directRequestBroker;
 
+    @Value("${backend.jwt.token}")
+    private String pulsarJwtToken;
+
 
     public Map<String, Object> getBrokersList(Integer pageNum, Integer 
pageSize, String cluster, String requestHost) {
         Map<String, Object> brokersMap = Maps.newHashMap();
@@ -39,6 +43,9 @@ public class BrokersServiceImpl implements BrokersService {
             Gson gson = new Gson();
             Map<String, String> header = Maps.newHashMap();
             header.put("Content-Type", "application/json");
+            if (StringUtils.isNotBlank(pulsarJwtToken)) {
+                header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+            }
             String failureDomainsResult = HttpUtil.doGet(
                     requestHost + "/admin/v2/clusters/" + cluster + 
"/failureDomains", header);
             Map<String, Map<String, List<String>>> failureDomains = 
gson.fromJson(
diff --git 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/ClustersServiceImpl.java
 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/ClustersServiceImpl.java
index 27b160d..92820a3 100644
--- 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/ClustersServiceImpl.java
+++ 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/ClustersServiceImpl.java
@@ -20,6 +20,8 @@ import io.streamnative.pulsar.manager.service.BrokersService;
 import io.streamnative.pulsar.manager.service.ClustersService;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
 import java.util.function.Function;
+
+import org.apache.commons.lang3.StringUtils;
 import org.apache.pulsar.common.policies.data.ClusterData;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -35,6 +37,9 @@ public class ClustersServiceImpl implements ClustersService {
     @Value("${backend.directRequestBroker}")
     private boolean directRequestBroker;
 
+    @Value("${backend.jwt.token}")
+    private String pulsarJwtToken;
+
     @Autowired
     private BrokersService brokersService;
 
@@ -49,6 +54,9 @@ public class ClustersServiceImpl implements ClustersService {
             Gson gson = new Gson();
             Map<String, String> header = Maps.newHashMap();
             header.put("Content-Type", "application/json");
+            if (StringUtils.isNotBlank(pulsarJwtToken)) {
+                header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+            }
             String result = HttpUtil.doGet(envServiceUrl + 
"/admin/v2/clusters", header);
             List<String> clustersList = gson.fromJson(result, new 
TypeToken<List<String>>(){}.getType());
             for (String cluster: clustersList) {
diff --git 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
index 94c6d91..7a8dd8a 100644
--- 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
+++ 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
@@ -33,6 +33,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.pulsar.common.policies.data.ClusterData;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
@@ -46,6 +47,9 @@ public class EnvironmentCacheServiceImpl implements 
EnvironmentCacheService {
     @Autowired
     private EnvironmentsRepository environmentsRepository;
 
+    @Value("${backend.jwt.token}")
+    private String pulsarJwtToken;
+
     private final Map<String, Map<String, ClusterData>> environments;
 
     public EnvironmentCacheServiceImpl() {
@@ -99,6 +103,9 @@ public class EnvironmentCacheServiceImpl implements 
EnvironmentCacheService {
 
     private Map<String, String> jsonHeader() {
         Map<String, String> header = Maps.newHashMap();
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         header.put("Content-Type", "application/json");
         return header;
     }
diff --git 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/NamespacesServiceImpl.java
 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/NamespacesServiceImpl.java
index 3649652..e1e19e2 100644
--- 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/NamespacesServiceImpl.java
+++ 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/NamespacesServiceImpl.java
@@ -22,6 +22,7 @@ import 
io.streamnative.pulsar.manager.entity.TopicsStatsRepository;
 import io.streamnative.pulsar.manager.service.NamespacesService;
 import io.streamnative.pulsar.manager.service.TopicsService;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -34,6 +35,9 @@ public class NamespacesServiceImpl implements 
NamespacesService {
     @Value("${backend.directRequestBroker}")
     private boolean directRequestBroker;
 
+    @Value("${backend.jwt.token}")
+    private String pulsarJwtToken;
+
     @Autowired
     private TopicsStatsRepository topicsStatsRepository;
 
@@ -47,6 +51,9 @@ public class NamespacesServiceImpl implements 
NamespacesService {
             Gson gson = new Gson();
             Map<String, String> header = Maps.newHashMap();
             header.put("Content-Type", "application/json");
+            if (StringUtils.isNotBlank(pulsarJwtToken)) {
+                header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+            }
             String result = HttpUtil.doGet(requestHost + 
"/admin/v2/namespaces/" + tenant, header);
             if (result != null) {
                 List<String> namespacesList = gson.fromJson(result, new 
TypeToken<List<String>>(){}.getType());
diff --git 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/TenantsServiceImpl.java
 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/TenantsServiceImpl.java
index 4224398..5017e7d 100644
--- 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/TenantsServiceImpl.java
+++ 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/TenantsServiceImpl.java
@@ -18,6 +18,7 @@ import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
 import io.streamnative.pulsar.manager.service.TenantsService;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.pulsar.common.policies.data.TenantInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,6 +38,9 @@ public class TenantsServiceImpl implements TenantsService {
     @Value("${backend.directRequestBroker}")
     private boolean directRequestBroker;
 
+    @Value("${backend.jwt.token}")
+    private String pulsarJwtToken;
+
     public Map<String, Object> getTenantsList(Integer pageNum, Integer 
pageSize, String requestHost) {
         Map<String, Object> tenantsMap = Maps.newHashMap();
         List<Map<String, Object>> tenantsArray = new ArrayList<>();
@@ -44,6 +48,9 @@ public class TenantsServiceImpl implements TenantsService {
             Gson gson = new Gson();
             Map<String, String> header = Maps.newHashMap();
             header.put("Content-Type", "application/json");
+            if (StringUtils.isNotBlank(pulsarJwtToken)) {
+                header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+            }
             String result = HttpUtil.doGet( requestHost + "/admin/v2/tenants", 
header);
             if (result != null) {
                 List<String> tenantsList = gson.fromJson(result, new 
TypeToken<List<String>>(){}.getType());
diff --git 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/TopicsServiceImpl.java
 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/TopicsServiceImpl.java
index dd41382..ff25b2b 100644
--- 
a/src/main/java/io/streamnative/pulsar/manager/service/impl/TopicsServiceImpl.java
+++ 
b/src/main/java/io/streamnative/pulsar/manager/service/impl/TopicsServiceImpl.java
@@ -22,6 +22,7 @@ import 
io.streamnative.pulsar.manager.entity.TopicStatsEntity.TopicStatsSummary;
 import io.streamnative.pulsar.manager.entity.TopicsStatsRepository;
 import io.streamnative.pulsar.manager.service.TopicsService;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,6 +40,9 @@ public class TopicsServiceImpl implements TopicsService {
     @Value("${backend.directRequestBroker}")
     private boolean directRequestBroker;
 
+    @Value("${backend.jwt.token}")
+    private String pulsarJwtToken;
+
     @Autowired
     private TopicsStatsRepository topicsStatsRepository;
 
@@ -192,6 +196,9 @@ public class TopicsServiceImpl implements TopicsService {
             String tenant, String namespace, String persistent, String 
requestHost) {
         List<Map<String, String>> topicsArray = new ArrayList<>();
         Map<String, String> header = Maps.newHashMap();
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         header.put("Content-Type", "application/json");
         String prefix = "/admin/v2/" + persistent + "/" + tenant + "/" + 
namespace;
         Gson gson = new Gson();
diff --git 
a/src/main/java/io/streamnative/pulsar/manager/zuul/EnvironmentForward.java 
b/src/main/java/io/streamnative/pulsar/manager/zuul/EnvironmentForward.java
index 5657977..96dfd77 100644
--- a/src/main/java/io/streamnative/pulsar/manager/zuul/EnvironmentForward.java
+++ b/src/main/java/io/streamnative/pulsar/manager/zuul/EnvironmentForward.java
@@ -20,6 +20,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
 import org.springframework.stereotype.Component;
 
@@ -40,6 +41,8 @@ public class EnvironmentForward extends ZuulFilter {
 
     @Autowired
     private EnvironmentCacheService environmentCacheService;
+    @Value("${backend.jwt.token}")
+    private String pulsarJwtToken;
 
     @Override
     public String filterType() {
@@ -89,12 +92,13 @@ public class EnvironmentForward extends ZuulFilter {
     private Object forwardRequest(RequestContext ctx, HttpServletRequest 
request, String serviceUrl) {
         ctx.put(REQUEST_URI_KEY, request.getRequestURI());
         try {
+            ctx.addZuulRequestHeader("Authorization", String.format("Bearer 
%s", pulsarJwtToken));
             ctx.setRouteHost(new URL(serviceUrl));
             log.info("Forward request to {} @ path {}",
-                serviceUrl, request.getRequestURI());
+                    serviceUrl, request.getRequestURI());
         } catch (MalformedURLException e) {
             log.error("Route forward to {} path {} error: {}",
-                serviceUrl, request.getRequestURI(), e.getMessage());
+                    serviceUrl, request.getRequestURI(), e.getMessage());
         }
         return null;
     }
diff --git a/src/main/resources/application.properties 
b/src/main/resources/application.properties
index f92afb6..5e3fc7e 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -57,11 +57,14 @@ spring.datasource.initialization-mode=always
 #spring.datasource.password=postgres
 
 # zuul config
+# 
https://cloud.spring.io/spring-cloud-static/Dalston.SR5/multi/multi__router_and_filter_zuul.html
+# By Default Zuul adds  Authorization to be dropped headers list. Below we are 
manually setting it
+zuul.sensitive-headers=Cookie,Set-Cookie
 zuul.routes.admin.path=/admin/**
 zuul.routes.admin.url=http://localhost:8080/admin/
 zuul.routes.lookup.path=/lookup/**
 zuul.routes.lookup.url=http://localhost:8080/lookup/
-        
+
 # pagehelper plugin
 #pagehelper.helperDialect=sqlite
 # force 'mysql' for HerdDB, comment out for postgresql
@@ -69,6 +72,7 @@ pagehelper.helperDialect=mysql
 
 backend.directRequestBroker=true
 backend.directRequestHost=http://localhost:8080
+backend.jwt.token=
 
 jwt.secret=dab1c8ba-b01b-11e9-b384-186590e06885
 jwt.sessionTime=2592000
diff --git 
a/src/test/java/io/streamnative/pulsar/manager/service/BookiesServiceImplTest.java
 
b/src/test/java/io/streamnative/pulsar/manager/service/BookiesServiceImplTest.java
index 2f556b3..e04aa06 100644
--- 
a/src/test/java/io/streamnative/pulsar/manager/service/BookiesServiceImplTest.java
+++ 
b/src/test/java/io/streamnative/pulsar/manager/service/BookiesServiceImplTest.java
@@ -17,6 +17,7 @@ import com.google.common.collect.Maps;
 import io.streamnative.pulsar.manager.PulsarManagerApplication;
 import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -26,6 +27,7 @@ import 
org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.TestPropertySource;
@@ -50,11 +52,17 @@ public class BookiesServiceImplTest {
     @Autowired
     private BookiesService bookiesService;
 
+    @Value("${backend.jwt.token}")
+    private static String pulsarJwtToken;
+
     @Test
     public void bookiesServiceTest() {
         PowerMockito.mockStatic(HttpUtil.class);
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8050/api/v1/bookie/list_bookies?type=rw&print_hostnames=true";,
 header))
                 .thenReturn("{\"192.168.2.116:3181\" : \"192.168.2.116\"}");
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/brokers/standalone";,
 header))
diff --git 
a/src/test/java/io/streamnative/pulsar/manager/service/BrokerStatsServiceImplTest.java
 
b/src/test/java/io/streamnative/pulsar/manager/service/BrokerStatsServiceImplTest.java
index 62b8336..0abe3df 100644
--- 
a/src/test/java/io/streamnative/pulsar/manager/service/BrokerStatsServiceImplTest.java
+++ 
b/src/test/java/io/streamnative/pulsar/manager/service/BrokerStatsServiceImplTest.java
@@ -28,6 +28,7 @@ import 
io.streamnative.pulsar.manager.entity.ReplicationStatsEntity;
 import io.streamnative.pulsar.manager.entity.TopicStatsEntity;
 import io.streamnative.pulsar.manager.entity.TopicsStatsRepository;
 import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile;
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -37,6 +38,7 @@ import 
org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
@@ -60,6 +62,9 @@ public class BrokerStatsServiceImplTest {
     @Autowired
     private BrokerStatsService brokerStatsService;
 
+    @Value("${backend.jwt.token}")
+    private static String pulsarJwtToken;
+
     @Autowired
     private TopicsStatsRepository topicsStatsRepository;
 
@@ -217,6 +222,9 @@ public class BrokerStatsServiceImplTest {
         PowerMockito.mockStatic(HttpUtil.class);
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)){
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters";, 
header))
                 .thenReturn("[\"standalone\"]");
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters/standalone";,
 header))
diff --git 
a/src/test/java/io/streamnative/pulsar/manager/service/BrokersServiceImplTest.java
 
b/src/test/java/io/streamnative/pulsar/manager/service/BrokersServiceImplTest.java
index 825e021..a369f02 100644
--- 
a/src/test/java/io/streamnative/pulsar/manager/service/BrokersServiceImplTest.java
+++ 
b/src/test/java/io/streamnative/pulsar/manager/service/BrokersServiceImplTest.java
@@ -19,6 +19,8 @@ import 
io.streamnative.pulsar.manager.entity.EnvironmentEntity;
 import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
 import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -28,6 +30,7 @@ import 
org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
@@ -45,6 +48,9 @@ import org.springframework.test.context.junit4.SpringRunner;
 @ActiveProfiles("test")
 public class BrokersServiceImplTest {
 
+    @Value("${backend.jwt.token}")
+    private static String pulsarJwtToken;
+
     @Autowired
     private BrokersService brokersService;
 
@@ -53,6 +59,10 @@ public class BrokersServiceImplTest {
         PowerMockito.mockStatic(HttpUtil.class);
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
+
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters/standalone/failureDomains";,
 header))
                 .thenReturn("{\"test\":{\"brokers\":[\"tengdeMBP:8080\"]}}");
 
diff --git 
a/src/test/java/io/streamnative/pulsar/manager/service/ClustersServiceImplTest.java
 
b/src/test/java/io/streamnative/pulsar/manager/service/ClustersServiceImplTest.java
index 3c3a04d..51948e5 100644
--- 
a/src/test/java/io/streamnative/pulsar/manager/service/ClustersServiceImplTest.java
+++ 
b/src/test/java/io/streamnative/pulsar/manager/service/ClustersServiceImplTest.java
@@ -17,6 +17,7 @@ import com.google.common.collect.Maps;
 import io.streamnative.pulsar.manager.PulsarManagerApplication;
 import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -26,6 +27,7 @@ import 
org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
@@ -48,11 +50,17 @@ public class ClustersServiceImplTest {
     @Autowired
     private ClustersService clustersService;
 
+    @Value("${backend.jwt.token}")
+    private static String pulsarJwtToken;
+
     @Test
     public void clusterServiceImplTest() {
         PowerMockito.mockStatic(HttpUtil.class);
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters";, 
header))
                 .thenReturn("[\"standalone\"]");
 
diff --git 
a/src/test/java/io/streamnative/pulsar/manager/service/NamespacesServiceImplTest.java
 
b/src/test/java/io/streamnative/pulsar/manager/service/NamespacesServiceImplTest.java
index 1710dde..e36b625 100644
--- 
a/src/test/java/io/streamnative/pulsar/manager/service/NamespacesServiceImplTest.java
+++ 
b/src/test/java/io/streamnative/pulsar/manager/service/NamespacesServiceImplTest.java
@@ -17,6 +17,7 @@ import com.google.common.collect.Maps;
 import io.streamnative.pulsar.manager.PulsarManagerApplication;
 import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -26,6 +27,7 @@ import 
org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
@@ -51,11 +53,17 @@ public class NamespacesServiceImplTest {
     @Autowired
     private BrokerStatsService brokerStatsService;
 
+    @Value("${backend.jwt.token}")
+    private static String pulsarJwtToken;
+
     @Test
     public void namespaceServiceImplTest() {
         PowerMockito.mockStatic(HttpUtil.class);
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/namespaces/public";,
 header))
                 .thenReturn("[\"public/default\"]");
 
@@ -75,6 +83,9 @@ public class NamespacesServiceImplTest {
         PowerMockito.mockStatic(HttpUtil.class);
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters";, 
header))
                 .thenReturn("[\"standalone\"]");
 
diff --git 
a/src/test/java/io/streamnative/pulsar/manager/service/TenantsServiceImplTest.java
 
b/src/test/java/io/streamnative/pulsar/manager/service/TenantsServiceImplTest.java
index 973f914..7c06822 100644
--- 
a/src/test/java/io/streamnative/pulsar/manager/service/TenantsServiceImplTest.java
+++ 
b/src/test/java/io/streamnative/pulsar/manager/service/TenantsServiceImplTest.java
@@ -17,6 +17,7 @@ import com.google.common.collect.Maps;
 import io.streamnative.pulsar.manager.PulsarManagerApplication;
 import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -26,6 +27,7 @@ import 
org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
@@ -51,11 +53,17 @@ public class TenantsServiceImplTest {
     @Autowired
     private TenantsService tenantsService;
 
+    @Value("${backend.jwt.token}")
+    private static String pulsarJwtToken;
+
     @Test
     public void tenantsServiceImplTest() {
         PowerMockito.mockStatic(HttpUtil.class);
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/tenants";, 
header)).thenReturn("[\"public\"]");
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/tenants/public";,
 header))
                 .thenReturn("{\"adminRoles\": [\"admin\"], 
\"allowedClusters\": [\"standalone\"]}");
diff --git 
a/src/test/java/io/streamnative/pulsar/manager/service/TopicsServiceImplTest.java
 
b/src/test/java/io/streamnative/pulsar/manager/service/TopicsServiceImplTest.java
index 233b563..2ec31de 100644
--- 
a/src/test/java/io/streamnative/pulsar/manager/service/TopicsServiceImplTest.java
+++ 
b/src/test/java/io/streamnative/pulsar/manager/service/TopicsServiceImplTest.java
@@ -17,6 +17,7 @@ import com.google.common.collect.Maps;
 import io.streamnative.pulsar.manager.PulsarManagerApplication;
 import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile;
 import io.streamnative.pulsar.manager.utils.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -26,6 +27,7 @@ import 
org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
@@ -53,6 +55,9 @@ public class TopicsServiceImplTest {
     @Autowired
     private BrokerStatsService brokerStatsService;
 
+    @Value("${backend.jwt.token}")
+    private static String pulsarJwtToken;
+
     private final String topics = "[" +
             "\"persistent://public/default/test789\"," +
             "\"persistent://public/default/test900-partition-0\"," +
@@ -66,6 +71,9 @@ public class TopicsServiceImplTest {
         PowerMockito.mockStatic(HttpUtil.class);
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/persistent/public/default";,
 header))
                 .thenReturn(topics);
         PowerMockito.when(HttpUtil.doGet(
@@ -87,6 +95,9 @@ public class TopicsServiceImplTest {
         PowerMockito.mockStatic(HttpUtil.class);
         Map<String, String> header = Maps.newHashMap();
         header.put("Content-Type", "application/json");
+        if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            header.put("Authorization", String.format("Bearer %s", 
pulsarJwtToken));
+        }
         
PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters";, 
header))
                 .thenReturn("[\"standalone\"]");
 

Reply via email to