[KYUUBI #7003] Cut out JNA dependencies for authZ plugin

### Why are the changes needed?

This PR provides an alternative for RANGER-4125 to cut out JNA dependencies for authZ plugin.

### How was this patch tested?

Pass GHA, and I checked the content of authz-shaded jar

```
$ jar tf extensions/spark/kyuubi-spark-authz-shaded/target/kyuubi-spark-authz-shaded_2.12-1.11.0-SNAPSHOT.jar | grep Hostname
org/apache/kyuubi/shade/com/kstruct/gethostname4j/Hostname.class
```

### Was this patch authored or co-authored using generative AI tooling?

No.

Closes #7003 from pan3793/authz-hostname.

Closes #7003

42e246856 [Cheng Pan] Cut out JNA dependencies for authz plugin

Authored-by: Cheng Pan <chengpan@apache.org>
Signed-off-by: Cheng Pan <chengpan@apache.org>
This commit is contained in:
Cheng Pan 2025-03-26 11:19:58 +08:00
parent 560e0fbee1
commit 176bc293fc
No known key found for this signature in database
GPG Key ID: 8001952629BCC75D
3 changed files with 52 additions and 25 deletions

View File

@ -51,11 +51,7 @@
<include>org.apache.ranger:*</include>
<include>org.codehaus.jackson:*</include>
<include>com.sun.jersey:*</include>
<include>com.kstruct:gethostname4j</include>
<include>javax.ws.rs:jsr311-api</include>
<!-- JNA is the transitive dependency of gethostname4j -->
<include>net.java.dev.jna:jna</include>
<include>net.java.dev.jna:jna-platform</include>
</includes>
</artifactSet>
<filters>

View File

@ -33,10 +33,7 @@
<properties>
<ranger.version>2.5.0</ranger.version>
<!-- the following components' version may need to tune to align w/ the ranger.version-->
<gethostname4j.version>1.0.0</gethostname4j.version>
<jersey.client.version>1.19.4</jersey.client.version>
<jna.version>5.7.0</jna.version>
</properties>
<dependencies>
@ -108,24 +105,6 @@
<version>${jersey.client.version}</version>
</dependency>
<dependency>
<groupId>com.kstruct</groupId>
<artifactId>gethostname4j</artifactId>
<version>${gethostname4j.version}</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>${jna.version}</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>${jna.version}</version>
</dependency>
<dependency>
<groupId>org.apache.ranger</groupId>
<artifactId>ranger-plugin-classloader</artifactId>

View File

@ -0,0 +1,52 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.kstruct.gethostname4j;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.SystemUtils;
// Alternative for RANGER-4125 to cut out JNA dependencies
public class Hostname {
// The highest priority environment variable which allows user to
// set hostname for Ranger client
public static final String RANGER_CLIENT_HOSTNAME = "RANGER_CLIENT_HOSTNAME";
/** @return the hostname the of the current machine */
public static String getHostname() {
String hostname = System.getenv(RANGER_CLIENT_HOSTNAME);
if (isValid(hostname)) return hostname;
// Gets the host name from an environment variable
// (COMPUTERNAME on Windows, HOSTNAME elsewhere)
hostname = SystemUtils.getHostName();
if (isValid(hostname)) return hostname;
try {
return InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException rethrow) {
throw new RuntimeException(rethrow);
}
}
private static boolean isValid(String hostname) {
return StringUtils.isNotBlank(hostname) && !"localhost".equals(hostname);
}
}