diff --git a/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java b/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java
index 985f20397..30b7d21a7 100755
--- a/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java
+++ b/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java
@@ -26,6 +26,8 @@
import java.io.IOException;
import java.net.URL;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
@@ -44,6 +46,8 @@
import org.slf4j.helpers.Util;
import org.slf4j.spi.SLF4JServiceProvider;
+import javax.accessibility.AccessibleComponent;
+
/**
* The LoggerFactory
is a utility class producing Loggers for
* various logging APIs, most notably for log4j, logback and JDK 1.4 logging.
@@ -104,7 +108,7 @@ static List findServiceProviders() {
// retain behaviour similar to that of 1.7 series and earlier. More specifically, use the class loader that
// loaded the present class to search for services
final ClassLoader classLoaderOfLoggerFactory = LoggerFactory.class.getClassLoader();
- ServiceLoader serviceLoader = ServiceLoader.load(SLF4JServiceProvider.class, classLoaderOfLoggerFactory);
+ ServiceLoader serviceLoader = getServiceLoader(classLoaderOfLoggerFactory);
List providerList = new ArrayList<>();
Iterator iterator = serviceLoader.iterator();
while (iterator.hasNext()) {
@@ -113,6 +117,18 @@ static List findServiceProviders() {
return providerList;
}
+ private static ServiceLoader getServiceLoader(final ClassLoader classLoaderOfLoggerFactory) {
+ ServiceLoader serviceLoader;
+ SecurityManager securityManager = System.getSecurityManager();
+ if(securityManager == null) {
+ serviceLoader = ServiceLoader.load(SLF4JServiceProvider.class, classLoaderOfLoggerFactory);
+ } else {
+ final PrivilegedAction> action = () -> ServiceLoader.load(SLF4JServiceProvider.class, classLoaderOfLoggerFactory);
+ serviceLoader = AccessController.doPrivileged(action);
+ }
+ return serviceLoader;
+ }
+
private static void safelyInstantiate(List providerList, Iterator iterator) {
try {
SLF4JServiceProvider provider = iterator.next();