diff --git a/src/main/java/com/orbitz/consul/Consul.java b/src/main/java/com/orbitz/consul/Consul.java index ad07d900..1c42f33a 100644 --- a/src/main/java/com/orbitz/consul/Consul.java +++ b/src/main/java/com/orbitz/consul/Consul.java @@ -21,6 +21,7 @@ import com.orbitz.consul.cache.TimeoutInterceptor; import com.orbitz.consul.config.ClientConfig; import com.orbitz.consul.monitoring.ClientEventCallback; +import com.orbitz.consul.util.AuthTokenProducer; import com.orbitz.consul.util.Jackson; import com.orbitz.consul.util.TrustManagerUtils; import com.orbitz.consul.util.bookend.ConsulBookend; @@ -392,6 +393,28 @@ public Builder withTokenAuth(String token) { return this; } + + /** + * Sets the token used for authentication + * + * @param authTokenProducer the producer of the authentication token + * @return The builder. + */ + public Builder withTokenAuth(AuthTokenProducer authTokenProducer) { + authInterceptor = chain -> { + Request original = chain.request(); + + Request.Builder requestBuilder = original.newBuilder() + .header("X-Consul-Token", authTokenProducer.getToken()) + .method(original.method(), original.body()); + + Request request = requestBuilder.build(); + return chain.proceed(request); + }; + + return this; + } + /** * Sets the ACL token to be used with Consul * diff --git a/src/main/java/com/orbitz/consul/util/AuthTokenProducer.java b/src/main/java/com/orbitz/consul/util/AuthTokenProducer.java new file mode 100644 index 00000000..58abc6b2 --- /dev/null +++ b/src/main/java/com/orbitz/consul/util/AuthTokenProducer.java @@ -0,0 +1,7 @@ +package com.orbitz.consul.util; + +public interface AuthTokenProducer { + + String getToken(); + +}