Skip to content

Commit 3bc58f3

Browse files
committed
add SecurityManager support
Signed-off-by: Ceki Gulcu <ceki@qos.ch>
1 parent 207bb29 commit 3bc58f3

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

slf4j-api/src/main/java/org/slf4j/LoggerFactory.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
import java.io.IOException;
2828
import java.net.URL;
29+
import java.security.AccessController;
30+
import java.security.PrivilegedAction;
2931
import java.util.ArrayList;
3032
import java.util.Arrays;
3133
import java.util.Enumeration;
@@ -44,6 +46,8 @@
4446
import org.slf4j.helpers.Util;
4547
import org.slf4j.spi.SLF4JServiceProvider;
4648

49+
import javax.accessibility.AccessibleComponent;
50+
4751
/**
4852
* The <code>LoggerFactory</code> is a utility class producing Loggers for
4953
* various logging APIs, most notably for log4j, logback and JDK 1.4 logging.
@@ -104,7 +108,7 @@ static List<SLF4JServiceProvider> findServiceProviders() {
104108
// retain behaviour similar to that of 1.7 series and earlier. More specifically, use the class loader that
105109
// loaded the present class to search for services
106110
final ClassLoader classLoaderOfLoggerFactory = LoggerFactory.class.getClassLoader();
107-
ServiceLoader<SLF4JServiceProvider> serviceLoader = ServiceLoader.load(SLF4JServiceProvider.class, classLoaderOfLoggerFactory);
111+
ServiceLoader<SLF4JServiceProvider> serviceLoader = getServiceLoader(classLoaderOfLoggerFactory);
108112
List<SLF4JServiceProvider> providerList = new ArrayList<>();
109113
Iterator<SLF4JServiceProvider> iterator = serviceLoader.iterator();
110114
while (iterator.hasNext()) {
@@ -113,6 +117,18 @@ static List<SLF4JServiceProvider> findServiceProviders() {
113117
return providerList;
114118
}
115119

120+
private static ServiceLoader<SLF4JServiceProvider> getServiceLoader(final ClassLoader classLoaderOfLoggerFactory) {
121+
ServiceLoader<SLF4JServiceProvider> serviceLoader;
122+
SecurityManager securityManager = System.getSecurityManager();
123+
if(securityManager == null) {
124+
serviceLoader = ServiceLoader.load(SLF4JServiceProvider.class, classLoaderOfLoggerFactory);
125+
} else {
126+
final PrivilegedAction<ServiceLoader<SLF4JServiceProvider>> action = () -> ServiceLoader.load(SLF4JServiceProvider.class, classLoaderOfLoggerFactory);
127+
serviceLoader = AccessController.doPrivileged(action);
128+
}
129+
return serviceLoader;
130+
}
131+
116132
private static void safelyInstantiate(List<SLF4JServiceProvider> providerList, Iterator<SLF4JServiceProvider> iterator) {
117133
try {
118134
SLF4JServiceProvider provider = iterator.next();

0 commit comments

Comments
 (0)