diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/java/org/apache/nifi/authorization/AuthorizerFactory.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/java/org/apache/nifi/authorization/AuthorizerFactory.java index 660b47b5bc..8940c789ad 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/java/org/apache/nifi/authorization/AuthorizerFactory.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/java/org/apache/nifi/authorization/AuthorizerFactory.java @@ -329,62 +329,62 @@ public final class AuthorizerFactory { * @param baseAuthorizer base authorizer * @return authorizer */ - public static Authorizer withNarLoader(final Authorizer baseAuthorizer) { + public static Authorizer withNarLoader(final Authorizer baseAuthorizer, final ClassLoader classLoader) { if (baseAuthorizer instanceof ManagedAuthorizer) { final ManagedAuthorizer baseManagedAuthorizer = (ManagedAuthorizer) baseAuthorizer; return new ManagedAuthorizer() { @Override public String getFingerprint() throws AuthorizationAccessException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { return baseManagedAuthorizer.getFingerprint(); } } @Override public void inheritFingerprint(String fingerprint) throws AuthorizationAccessException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { baseManagedAuthorizer.inheritFingerprint(fingerprint); } } @Override public void checkInheritability(String proposedFingerprint) throws AuthorizationAccessException, UninheritableAuthorizationsException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { baseManagedAuthorizer.checkInheritability(proposedFingerprint); } } @Override public AccessPolicyProvider getAccessPolicyProvider() { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { return baseManagedAuthorizer.getAccessPolicyProvider(); } } @Override public AuthorizationResult authorize(AuthorizationRequest request) throws AuthorizationAccessException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { return baseManagedAuthorizer.authorize(request); } } @Override public void initialize(AuthorizerInitializationContext initializationContext) throws AuthorizerCreationException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { baseManagedAuthorizer.initialize(initializationContext); } } @Override public void onConfigured(AuthorizerConfigurationContext configurationContext) throws AuthorizerCreationException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { baseManagedAuthorizer.onConfigured(configurationContext); } } @Override public void preDestruction() throws AuthorizerDestructionException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { baseManagedAuthorizer.preDestruction(); } } @@ -393,28 +393,28 @@ public final class AuthorizerFactory { return new Authorizer() { @Override public AuthorizationResult authorize(final AuthorizationRequest request) throws AuthorizationAccessException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { return baseAuthorizer.authorize(request); } } @Override public void initialize(AuthorizerInitializationContext initializationContext) throws AuthorizerCreationException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { baseAuthorizer.initialize(initializationContext); } } @Override public void onConfigured(AuthorizerConfigurationContext configurationContext) throws AuthorizerCreationException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { baseAuthorizer.onConfigured(configurationContext); } } @Override public void preDestruction() throws AuthorizerDestructionException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { + try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(classLoader)) { baseAuthorizer.preDestruction(); } } diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java index 9de8756861..8ed5aaf0d4 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java @@ -26,6 +26,7 @@ import org.apache.nifi.authorization.generated.Property; import org.apache.nifi.bundle.Bundle; import org.apache.nifi.nar.ExtensionManager; import org.apache.nifi.util.NiFiProperties; +import org.apache.nifi.util.file.classloader.ClassLoaderUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.DisposableBean; @@ -45,6 +46,8 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -131,7 +134,7 @@ public class AuthorizerFactoryBean implements FactoryBean, DisposableBean, UserG // create each authorizer for (final org.apache.nifi.authorization.generated.Authorizer authorizer : authorizerConfiguration.getAuthorizer()) { - authorizers.put(authorizer.getIdentifier(), createAuthorizer(authorizer.getIdentifier(), authorizer.getClazz())); + authorizers.put(authorizer.getIdentifier(), createAuthorizer(authorizer.getIdentifier(), authorizer.getClazz(),authorizer.getClasspath())); } // configure each authorizer @@ -273,7 +276,7 @@ public class AuthorizerFactoryBean implements FactoryBean, DisposableBean, UserG return AccessPolicyProviderFactory.withNarLoader(instance); } - private Authorizer createAuthorizer(final String identifier, final String authorizerClassName) throws Exception { + private Authorizer createAuthorizer(final String identifier, final String authorizerClassName, final String classpathResources) throws Exception { // get the classloader for the specified authorizer final List authorizerBundles = ExtensionManager.getBundles(authorizerClassName); @@ -286,7 +289,7 @@ public class AuthorizerFactoryBean implements FactoryBean, DisposableBean, UserG } final Bundle authorizerBundle = authorizerBundles.get(0); - final ClassLoader authorizerClassLoader = authorizerBundle.getClassLoader(); + ClassLoader authorizerClassLoader = authorizerBundle.getClassLoader(); // get the current context classloader final ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader(); @@ -318,7 +321,12 @@ public class AuthorizerFactoryBean implements FactoryBean, DisposableBean, UserG } } - return AuthorizerFactory.installIntegrityChecks(AuthorizerFactory.withNarLoader(instance)); + if(StringUtils.isNotEmpty(classpathResources)) { + URL[] urls = ClassLoaderUtils.getURLsForClasspath(classpathResources, null, true); + authorizerClassLoader = new URLClassLoader(urls, authorizerClassLoader); + } + + return AuthorizerFactory.installIntegrityChecks(AuthorizerFactory.withNarLoader(instance,authorizerClassLoader)); } private AuthorizerConfigurationContext loadAuthorizerConfiguration(final String identifier, final List properties) { diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/xsd/authorizers.xsd b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/xsd/authorizers.xsd index 46c004a4cb..41963fd8cc 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/xsd/authorizers.xsd +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-authorizer/src/main/xsd/authorizers.xsd @@ -37,7 +37,8 @@ - + + diff --git a/nifi-nar-bundles/nifi-ranger-bundle/nifi-ranger-plugin/pom.xml b/nifi-nar-bundles/nifi-ranger-bundle/nifi-ranger-plugin/pom.xml index 4844e9547e..cf779dc0cb 100644 --- a/nifi-nar-bundles/nifi-ranger-bundle/nifi-ranger-plugin/pom.xml +++ b/nifi-nar-bundles/nifi-ranger-bundle/nifi-ranger-plugin/pom.xml @@ -86,7 +86,11 @@ findbugs-annotations 1.3.9-1 - + + org.apache.hadoop + hadoop-client + ${hadoop.version} + org.apache.nifi nifi-mock