This is an automated email from the ASF dual-hosted git repository.
yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new 858e54348 [#3807] feat(client-java): SimpleAuth can add a username
when build a GravitinoClient (#3866)
858e54348 is described below
commit 858e54348d03072d6ea5aaabdf092f4a2e6f3cfb
Author: mygrsun <[email protected]>
AuthorDate: Thu Aug 22 19:05:19 2024 +0800
[#3807] feat(client-java): SimpleAuth can add a username when build a
GravitinoClient (#3866)
### What changes were proposed in this pull request?
1.withSimpleAuth add user name as parameter to build simple auth
GravitinoClient
### Why are the changes needed?
fix the https://github.com/datastrato/gravitino/issues/3807
Fix: #3807
### Does this PR introduce _any_ user-facing change?
(Please list the user-facing changes introduced by your change,
including
no
### How was this patch tested?
---------
Co-authored-by: ericqin <[email protected]>
---
.../gravitino/client/GravitinoClientBase.java | 14 +++++++++++++
.../gravitino/client/SimpleTokenProvider.java | 11 +++++++++-
.../client/TestGravitinoClientBuilder.java | 24 ++++++++++++++++++++++
docs/security/how-to-authenticate.md | 9 ++++++++
4 files changed, 57 insertions(+), 1 deletion(-)
diff --git
a/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoClientBase.java
b/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoClientBase.java
index fbed4c3c9..649f5cc6b 100644
---
a/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoClientBase.java
+++
b/clients/client-java/src/main/java/org/apache/gravitino/client/GravitinoClientBase.java
@@ -21,6 +21,7 @@ package org.apache.gravitino.client;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.errorprone.annotations.InlineMe;
import java.io.Closeable;
@@ -28,6 +29,7 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.util.Collections;
import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.Namespace;
import org.apache.gravitino.Version;
@@ -226,6 +228,18 @@ public abstract class GravitinoClientBase implements
Closeable {
return this;
}
+ /**
+ * Sets the simple mode authentication for Gravitino with a specific
username
+ *
+ * @param userName The username of the user.
+ * @return This Builder instance for method chaining.
+ */
+ public Builder<T> withSimpleAuth(String userName) {
+ Preconditions.checkArgument(StringUtils.isNotBlank(userName), "userName
can't be blank");
+ this.authDataProvider = new SimpleTokenProvider(userName);
+ return this;
+ }
+
/**
* Optional, set a flag to verify the client is supported to connector the
server
*
diff --git
a/clients/client-java/src/main/java/org/apache/gravitino/client/SimpleTokenProvider.java
b/clients/client-java/src/main/java/org/apache/gravitino/client/SimpleTokenProvider.java
index ed416788b..969708f10 100644
---
a/clients/client-java/src/main/java/org/apache/gravitino/client/SimpleTokenProvider.java
+++
b/clients/client-java/src/main/java/org/apache/gravitino/client/SimpleTokenProvider.java
@@ -37,13 +37,22 @@ final class SimpleTokenProvider implements AuthDataProvider
{
if (gravitinoUser == null) {
gravitinoUser = System.getProperty("user.name");
}
+ this.token = buildToken(gravitinoUser);
+ }
+
+ public SimpleTokenProvider(String gravitinoUser) {
+ this.token = buildToken(gravitinoUser);
+ }
+
+ private byte[] buildToken(String gravitinoUser) {
String userInformation = gravitinoUser + ":dummy";
- this.token =
+ byte[] token =
(AuthConstants.AUTHORIZATION_BASIC_HEADER
+ new String(
Base64.getEncoder().encode(userInformation.getBytes(StandardCharsets.UTF_8)),
StandardCharsets.UTF_8))
.getBytes(StandardCharsets.UTF_8);
+ return token;
}
@Override
diff --git
a/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoClientBuilder.java
b/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoClientBuilder.java
index da5ecfe8b..a2dc36c47 100644
---
a/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoClientBuilder.java
+++
b/clients/client-java/src/test/java/org/apache/gravitino/client/TestGravitinoClientBuilder.java
@@ -41,12 +41,31 @@ public class TestGravitinoClientBuilder {
Assertions.assertEquals(ImmutableMap.of(), client1.getHeaders());
}
}
+
+ @Test
+ public void testGravitinoClientSimpleAuthWithUserName() {
+ String userName = "test_user";
+ try (MockGravitinoClient client =
+
MockGravitinoClient.builder("http://127.0.0.1").withSimpleAuth(userName).build())
{
+ Assertions.assertArrayEquals(
+ new SimpleTokenProvider(userName).getTokenData(),
+ client.getAuthDataProvider().getTokenData());
+ }
+
+ try (MockGravitinoClient client =
+
MockGravitinoClient.builder("http://127.0.0.1").withSimpleAuth().build()) {
+ Assertions.assertArrayEquals(
+ new SimpleTokenProvider().getTokenData(),
client.getAuthDataProvider().getTokenData());
+ }
+ }
}
class MockGravitinoClient extends GravitinoClientBase {
private Map<String, String> headers;
+ private AuthDataProvider authDataProvider;
+
/**
* Constructs a new GravitinoClient with the given URI, authenticator and
AuthDataProvider.
*
@@ -58,12 +77,17 @@ class MockGravitinoClient extends GravitinoClientBase {
String uri, AuthDataProvider authDataProvider, Map<String, String>
headers) {
super(uri, authDataProvider, false, headers);
this.headers = headers;
+ this.authDataProvider = authDataProvider;
}
Map<String, String> getHeaders() {
return headers;
}
+ AuthDataProvider getAuthDataProvider() {
+ return authDataProvider;
+ }
+
/**
* Creates a new builder for constructing a GravitinoClient.
*
diff --git a/docs/security/how-to-authenticate.md
b/docs/security/how-to-authenticate.md
index 41b620353..c98676350 100644
--- a/docs/security/how-to-authenticate.md
+++ b/docs/security/how-to-authenticate.md
@@ -24,6 +24,15 @@ GravitinoClient client = GravitinoClient.builder(uri)
.build();
```
+Additionally, the username can be directly used as a parameter to create a
client.
+
+```java
+GravitinoClient client = GravitinoClient.builder(uri)
+ .withMetalake("metalake")
+ .withSimpleAuth("test_user_name")
+ .build();
+```
+
### OAuth mode
Gravitino only supports external OAuth 2.0 servers. To enable OAuth mode,
users should follow the steps below.