diff --git a/engine/src/main/java/org/hibernate/validator/internal/util/actions/GetClassLoader.java b/engine/src/main/java/org/hibernate/validator/internal/util/actions/GetClassLoader.java index f2588b2c80..aa29edbeb3 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/util/actions/GetClassLoader.java +++ b/engine/src/main/java/org/hibernate/validator/internal/util/actions/GetClassLoader.java @@ -17,7 +17,21 @@ private GetClassLoader() { } public static ClassLoader fromContext() { - return Thread.currentThread().getContextClassLoader(); + if (System.getSecurityManager() == null) { + // Fast path when no SecurityManager is active + return Thread.currentThread().getContextClassLoader(); + } else { + // Use AccessController when SecurityManager is active + return AccessController.doPrivileged((PrivilegedAction) () -> { + ClassLoader tccl = null; + try { + tccl = Thread.currentThread().getContextClassLoader(); + } catch (SecurityException ex) { + LOG.warn("Unable to get context classloader instance.", ex); + } + return tccl; + }); + } } public static ClassLoader fromClass(Class clazz) {