diff --git a/pom.xml b/pom.xml
index e2a8639..7b9e61c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>com.baidu.hugegraph</groupId>
     <artifactId>hugegraph-common</artifactId>
-    <version>1.8.9</version>
+    <version>1.8.10</version>
 
     <name>hugegraph-common</name>
     <url>https://github.com/hugegraph/hugegraph-common</url>
diff --git a/src/main/java/com/baidu/hugegraph/perf/NormalStopwatch.java b/src/main/java/com/baidu/hugegraph/perf/NormalStopwatch.java
index c097cad..7011bca 100644
--- a/src/main/java/com/baidu/hugegraph/perf/NormalStopwatch.java
+++ b/src/main/java/com/baidu/hugegraph/perf/NormalStopwatch.java
@@ -268,7 +268,9 @@
             test.run();
             long end = PerfUtil.now();
             long cost = end - start - baseCost;
-            assert cost > 0;
+            if (cost < 0L) {
+                cost = 0L;
+            }
             long eachCost = cost / times;
 
             LOG.info("Wasted time test: cost={}ms, base_cost={}ms, {}={}ns",
diff --git a/src/main/java/com/baidu/hugegraph/rest/AbstractRestClient.java b/src/main/java/com/baidu/hugegraph/rest/AbstractRestClient.java
index 1048fc1..5c96196 100644
--- a/src/main/java/com/baidu/hugegraph/rest/AbstractRestClient.java
+++ b/src/main/java/com/baidu/hugegraph/rest/AbstractRestClient.java
@@ -19,6 +19,7 @@
 
 package com.baidu.hugegraph.rest;
 
+import java.io.IOException;
 import java.net.URI;
 import java.security.KeyManagementException;
 import java.security.SecureRandom;
@@ -38,6 +39,8 @@
 import javax.net.ssl.X509TrustManager;
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.ClientRequestContext;
+import javax.ws.rs.client.ClientRequestFilter;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.Invocation.Builder;
 import javax.ws.rs.client.WebTarget;
@@ -78,6 +81,8 @@
     // Time unit: ms
     private static final long IDLE_TIME = 40L * 1000L;
 
+    private static final String TOKEN_KEY = "tokenKey";
+
     private final Client client;
     private final WebTarget target;
 
@@ -130,6 +135,32 @@
                                      .build());
     }
 
+    public AbstractRestClient(String url, String token, int timeout) {
+        this(url, new ConfigBuilder().configTimeout(timeout)
+                                     .configToken(token)
+                                     .build());
+    }
+
+    public AbstractRestClient(String url, String token, int timeout,
+                              int maxTotal, int maxPerRoute) {
+        this(url, new ConfigBuilder().configTimeout(timeout)
+                                     .configToken(token)
+                                     .configPool(maxTotal, maxPerRoute)
+                                     .build());
+    }
+
+    public AbstractRestClient(String url, String token, int timeout,
+                              int maxTotal, int maxPerRoute,
+                              String trustStoreFile,
+                              String trustStorePassword) {
+        this(url, new ConfigBuilder().configTimeout(timeout)
+                                     .configToken(token)
+                                     .configPool(maxTotal, maxPerRoute)
+                                     .configSSL(trustStoreFile,
+                                                trustStorePassword)
+                                     .build());
+    }
+
     public AbstractRestClient(String url, ClientConfig config) {
         configConnectionManager(url, config);
         this.client = ClientBuilder.newClient(config);
@@ -519,6 +550,12 @@
             return this;
         }
 
+        public ConfigBuilder configToken(String token) {
+            this.config.property(TOKEN_KEY, token);
+            this.config.register(BearerRequestFilter.class);
+            return this;
+        }
+
         public ConfigBuilder configPool(int maxTotal, int maxPerRoute) {
             this.config.property("maxTotal", maxTotal);
             this.config.property("maxPerRoute", maxPerRoute);
@@ -547,4 +584,15 @@
             return this.config;
         }
     }
+
+    public static class BearerRequestFilter implements ClientRequestFilter {
+
+        @Override
+        public void filter(ClientRequestContext context) throws IOException {
+            String token = context.getClient().getConfiguration()
+                                  .getProperty(TOKEN_KEY).toString();
+            context.getHeaders().add(HttpHeaders.AUTHORIZATION,
+                                     "Bearer " + token);
+        }
+    }
 }
diff --git a/src/main/java/com/baidu/hugegraph/version/CommonVersion.java b/src/main/java/com/baidu/hugegraph/version/CommonVersion.java
index 773eb36..81a9756 100644
--- a/src/main/java/com/baidu/hugegraph/version/CommonVersion.java
+++ b/src/main/java/com/baidu/hugegraph/version/CommonVersion.java
@@ -27,5 +27,5 @@
 
     // The second parameter of Version.of() is for all-in-one JAR
     public static final Version VERSION = Version.of(CommonVersion.class,
-                                                     "1.8.9");
+                                                     "1.8.10");
 }
diff --git a/src/test/java/com/baidu/hugegraph/unit/rest/RestClientTest.java b/src/test/java/com/baidu/hugegraph/unit/rest/RestClientTest.java
index a9f4d97..d682025 100644
--- a/src/test/java/com/baidu/hugegraph/unit/rest/RestClientTest.java
+++ b/src/test/java/com/baidu/hugegraph/unit/rest/RestClientTest.java
@@ -111,6 +111,33 @@
             this.content = "";
         }
 
+        public RestClientImpl(String url, String token,
+                              int timeout, int status) {
+            super(url, token, timeout);
+            this.status = status;
+            this.headers = ImmutableMultivaluedMap.empty();
+            this.content = "";
+        }
+
+        public RestClientImpl(String url, String token, int timeout,
+                              int maxTotal, int maxPerRoute, int status) {
+            super(url, token, timeout, maxTotal, maxPerRoute);
+            this.status = status;
+            this.headers = ImmutableMultivaluedMap.empty();
+            this.content = "";
+        }
+
+        public RestClientImpl(String url, String token, int timeout,
+                              int maxTotal, int maxPerRoute,
+                              String trustStoreFile,
+                              String trustStorePassword, int status) {
+            super(url, token, timeout, maxTotal, maxPerRoute,
+                  trustStoreFile, trustStorePassword);
+            this.status = status;
+            this.headers = ImmutableMultivaluedMap.empty();
+            this.content = "";
+        }
+
         public RestClientImpl(String url, int timeout, int status) {
             this(url, timeout, status, ImmutableMultivaluedMap.empty(), "");
         }
@@ -219,6 +246,13 @@
     }
 
     @Test
+    public void testPostWithToken() {
+        RestClient client = new RestClientImpl("/test", "token", 1000, 200);
+        RestResult restResult = client.post("path", "body");
+        Assert.assertEquals(200, restResult.status());
+    }
+
+    @Test
     public void testPostWithAllParams() {
         RestClient client = new RestClientImpl("/test", "user", "", 1000,
                                                10, 5, 200);
@@ -227,6 +261,14 @@
     }
 
     @Test
+    public void testPostWithTokenAndAllParams() {
+        RestClient client = new RestClientImpl("/test", "token", 1000,
+                                               10, 5, 200);
+        RestResult restResult = client.post("path", "body");
+        Assert.assertEquals(200, restResult.status());
+    }
+
+    @Test
     public void testPostHttpsWithAllParams() {
         String trustStoreFile = "src/test/resources/cacerts.jks";
         String trustStorePassword = "changeit";
@@ -238,6 +280,17 @@
     }
 
     @Test
+    public void testPostHttpsWithTokenAndAllParams() {
+        String trustStoreFile = "src/test/resources/cacerts.jks";
+        String trustStorePassword = "changeit";
+        RestClient client = new RestClientImpl("/test", "token", 1000,
+                                               10, 5, trustStoreFile,
+                                               trustStorePassword, 200);
+        RestResult restResult = client.post("path", "body");
+        Assert.assertEquals(200, restResult.status());
+    }
+
+    @Test
     public void testHostNameVerifier() {
         BiFunction<String, String, Boolean> verifer = (url, hostname) -> {
             AbstractRestClient.HostNameVerifier verifier;
