diff --git a/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java b/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java
index 9b7f658de..5959c5c91 100644
--- a/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java
+++ b/prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java
@@ -12,6 +12,7 @@
import io.prometheus.metrics.model.registry.PrometheusScrapeRequest;
import io.prometheus.metrics.model.snapshots.MetricSnapshots;
import java.io.IOException;
+import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
@@ -45,7 +46,7 @@ public Result authenticate(HttpExchange exchange) {
HttpHandler handler =
exchange -> {
boolean found = false;
- Subject current = Subject.current();
+ Subject current = getCurrentSubject();
for (Principal p : current.getPrincipals()) {
if (user.equals(p.getName())) {
found = true;
@@ -186,4 +187,27 @@ void healthDisabled() throws IOException {
"204",
"/-/healthy");
}
+
+ /**
+ * Get current Subject using reflection to support both Java 17 and Java 18+.
+ *
+ * Java 18+ has Subject.current(), but Java 17 and earlier require
+ * Subject.getSubject(AccessController.getContext()).
+ */
+ @SuppressWarnings({"removal"})
+ private static Subject getCurrentSubject() {
+ try {
+ Method currentMethod = Subject.class.getMethod("current");
+ return (Subject) currentMethod.invoke(null);
+ } catch (NoSuchMethodException e) {
+ // Fall back to pre-Java 18 API
+ try {
+ return Subject.getSubject(java.security.AccessController.getContext());
+ } catch (Exception ex) {
+ throw new RuntimeException("Failed to get current Subject", ex);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to invoke Subject.current()", e);
+ }
+ }
}
diff --git a/prometheus-metrics-parent/pom.xml b/prometheus-metrics-parent/pom.xml
index 075eaf782..c5b521b1a 100644
--- a/prometheus-metrics-parent/pom.xml
+++ b/prometheus-metrics-parent/pom.xml
@@ -68,29 +68,39 @@
-
- com.diffplug.spotless
- spotless-maven-plugin
- 3.1.0
-
-
-
-
- ${spotless.skip}
-
-
-
- verify
-
- check
-
-
-
-
+
+ java17-plus
+
+ [17,)
+
+
+
+
+ com.diffplug.spotless
+ spotless-maven-plugin
+ 3.1.0
+
+
+
+
+ ${spotless.skip}
+
+
+
+ verify
+
+ check
+
+
+
+
+
+
+
release