Repository: nifi Updated Branches: refs/heads/master 806f4d549 -> 8d8a9cba7
http://git-wip-us.apache.org/repos/asf/nifi/blob/8d8a9cba/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java deleted file mode 100644 index 423ae25..0000000 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/java/org/apache/nifi/authorization/AuthorizerFactoryBean.java +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.nifi.authorization; - -import org.apache.commons.lang3.StringUtils; -import org.apache.nifi.authorization.annotation.AuthorizerContext; -import org.apache.nifi.authorization.exception.AuthorizationAccessException; -import org.apache.nifi.authorization.exception.AuthorizerCreationException; -import org.apache.nifi.authorization.exception.AuthorizerDestructionException; -import org.apache.nifi.authorization.generated.Authorizers; -import org.apache.nifi.authorization.generated.Property; -import org.apache.nifi.nar.ExtensionManager; -import org.apache.nifi.nar.NarCloseable; -import org.apache.nifi.util.NiFiProperties; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.FactoryBean; -import org.xml.sax.SAXException; - -import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import java.io.File; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; - -/** - * Factory bean for loading the configured authorizer. - */ -public class AuthorizerFactoryBean implements FactoryBean, DisposableBean, AuthorizerLookup { - - private static final Logger logger = LoggerFactory.getLogger(AuthorizerFactoryBean.class); - private static final String AUTHORIZERS_XSD = "/authorizers.xsd"; - private static final String JAXB_GENERATED_PATH = "org.apache.nifi.authorization.generated"; - private static final JAXBContext JAXB_CONTEXT = initializeJaxbContext(); - - /** - * Load the JAXBContext. - */ - private static JAXBContext initializeJaxbContext() { - try { - return JAXBContext.newInstance(JAXB_GENERATED_PATH, AuthorizerFactoryBean.class.getClassLoader()); - } catch (JAXBException e) { - throw new RuntimeException("Unable to create JAXBContext."); - } - } - - private Authorizer authorizer; - private NiFiProperties properties; - private final Map<String, Authorizer> authorizers = new HashMap<>(); - - @Override - public Authorizer getAuthorizer(String identifier) { - return authorizers.get(identifier); - } - - @Override - public Object getObject() throws Exception { - if (authorizer == null) { - if (properties.getSslPort() == null) { - // use a default authorizer... only allowable when running not securely - authorizer = createDefaultAuthorizer(); - } else { - // look up the authorizer to use - final String authorizerIdentifier = properties.getProperty(NiFiProperties.SECURITY_USER_AUTHORIZER); - - // ensure the authorizer class name was specified - if (StringUtils.isBlank(authorizerIdentifier)) { - throw new Exception("When running securely, the authorizer identifier must be specified in the nifi properties file."); - } else { - final Authorizers authorizerConfiguration = loadAuthorizersConfiguration(); - - // create each authorizer - for (final org.apache.nifi.authorization.generated.Authorizer authorizer : authorizerConfiguration.getAuthorizer()) { - authorizers.put(authorizer.getIdentifier(), createAuthorizer(authorizer.getIdentifier(), authorizer.getClazz())); - } - - // configure each authorizer - for (final org.apache.nifi.authorization.generated.Authorizer provider : authorizerConfiguration.getAuthorizer()) { - final Authorizer instance = authorizers.get(provider.getIdentifier()); - instance.onConfigured(loadAuthorizerConfiguration(provider)); - } - - // get the authorizer instance - authorizer = getAuthorizer(authorizerIdentifier); - - // ensure it was found - if (authorizer == null) { - throw new Exception(String.format("The specified authorizer '%s' could not be found.", authorizerIdentifier)); - } - } - } - } - - return authorizer; - } - - private Authorizers loadAuthorizersConfiguration() throws Exception { - final File authorizersConfigurationFile = properties.getAuthorizerConfiguraitonFile(); - - // load the authorizers from the specified file - if (authorizersConfigurationFile.exists()) { - try { - // find the schema - final SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - final Schema schema = schemaFactory.newSchema(Authorizers.class.getResource(AUTHORIZERS_XSD)); - - // attempt to unmarshal - final Unmarshaller unmarshaller = JAXB_CONTEXT.createUnmarshaller(); - unmarshaller.setSchema(schema); - final JAXBElement<Authorizers> element = unmarshaller.unmarshal(new StreamSource(authorizersConfigurationFile), Authorizers.class); - return element.getValue(); - } catch (SAXException | JAXBException e) { - throw new Exception("Unable to load the authorizer configuration file at: " + authorizersConfigurationFile.getAbsolutePath(), e); - } - } else { - throw new Exception("Unable to find the authorizer configuration file at " + authorizersConfigurationFile.getAbsolutePath()); - } - } - - private Authorizer createAuthorizer(final String identifier, final String authorizerClassName) throws Exception { - // get the classloader for the specified authorizer - final ClassLoader authorizerClassLoader = ExtensionManager.getClassLoader(authorizerClassName); - if (authorizerClassLoader == null) { - throw new Exception(String.format("The specified authorizer class '%s' is not known to this nifi.", authorizerClassName)); - } - - // get the current context classloader - final ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader(); - - final Authorizer instance; - try { - // set the appropriate class loader - Thread.currentThread().setContextClassLoader(authorizerClassLoader); - - // attempt to load the class - Class<?> rawAuthorizerClass = Class.forName(authorizerClassName, true, authorizerClassLoader); - Class<? extends Authorizer> authorizerClass = rawAuthorizerClass.asSubclass(Authorizer.class); - - // otherwise create a new instance - Constructor constructor = authorizerClass.getConstructor(); - instance = (Authorizer) constructor.newInstance(); - - // method injection - performMethodInjection(instance, authorizerClass); - - // field injection - performFieldInjection(instance, authorizerClass); - - // call post construction lifecycle event - instance.initialize(new StandardAuthorizerInitializationContext(identifier, this)); - } finally { - if (currentClassLoader != null) { - Thread.currentThread().setContextClassLoader(currentClassLoader); - } - } - - return withNarLoader(instance); - } - - private AuthorizerConfigurationContext loadAuthorizerConfiguration(final org.apache.nifi.authorization.generated.Authorizer authorizer) { - final Map<String, String> authorizerProperties = new HashMap<>(); - - for (final Property property : authorizer.getProperty()) { - authorizerProperties.put(property.getName(), property.getValue()); - } - - return new StandardAuthorizerConfigurationContext(authorizer.getIdentifier(), authorizerProperties); - } - - private void performMethodInjection(final Authorizer instance, final Class authorizerClass) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { - for (final Method method : authorizerClass.getMethods()) { - if (method.isAnnotationPresent(AuthorizerContext.class)) { - // make the method accessible - final boolean isAccessible = method.isAccessible(); - method.setAccessible(true); - - try { - final Class<?>[] argumentTypes = method.getParameterTypes(); - - // look for setters (single argument) - if (argumentTypes.length == 1) { - final Class<?> argumentType = argumentTypes[0]; - - // look for well known types - if (NiFiProperties.class.isAssignableFrom(argumentType)) { - // nifi properties injection - method.invoke(instance, properties); - } - } - } finally { - method.setAccessible(isAccessible); - } - } - } - - final Class parentClass = authorizerClass.getSuperclass(); - if (parentClass != null && Authorizer.class.isAssignableFrom(parentClass)) { - performMethodInjection(instance, parentClass); - } - } - - private void performFieldInjection(final Authorizer instance, final Class authorizerClass) throws IllegalArgumentException, IllegalAccessException { - for (final Field field : authorizerClass.getDeclaredFields()) { - if (field.isAnnotationPresent(AuthorizerContext.class)) { - // make the method accessible - final boolean isAccessible = field.isAccessible(); - field.setAccessible(true); - - try { - // get the type - final Class<?> fieldType = field.getType(); - - // only consider this field if it isn't set yet - if (field.get(instance) == null) { - // look for well known types - if (NiFiProperties.class.isAssignableFrom(fieldType)) { - // nifi properties injection - field.set(instance, properties); - } - } - - } finally { - field.setAccessible(isAccessible); - } - } - } - - final Class parentClass = authorizerClass.getSuperclass(); - if (parentClass != null && Authorizer.class.isAssignableFrom(parentClass)) { - performFieldInjection(instance, parentClass); - } - } - - /** - * @return a default Authorizer to use when running unsecurely with no authorizer configured - */ - private Authorizer createDefaultAuthorizer() { - return new Authorizer() { - @Override - public AuthorizationResult authorize(final AuthorizationRequest request) throws AuthorizationAccessException { - return AuthorizationResult.approved(); - } - - @Override - public void initialize(AuthorizerInitializationContext initializationContext) throws AuthorizerCreationException { - } - - @Override - public void onConfigured(AuthorizerConfigurationContext configurationContext) throws AuthorizerCreationException { - } - - @Override - public void preDestruction() throws AuthorizerDestructionException { - } - }; - } - - /** - * Decorates the base authorizer to ensure the nar context classloader is used when invoking the underlying methods. - * - * @param baseAuthorizer base authorizer - * @return authorizer - */ - public Authorizer withNarLoader(final Authorizer baseAuthorizer) { - return new Authorizer() { - @Override - public AuthorizationResult authorize(final AuthorizationRequest request) throws AuthorizationAccessException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { - return baseAuthorizer.authorize(request); - } - } - - @Override - public void initialize(AuthorizerInitializationContext initializationContext) throws AuthorizerCreationException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { - baseAuthorizer.initialize(initializationContext); - } - } - - @Override - public void onConfigured(AuthorizerConfigurationContext configurationContext) throws AuthorizerCreationException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { - baseAuthorizer.onConfigured(configurationContext); - } - } - - @Override - public void preDestruction() throws AuthorizerDestructionException { - try (final NarCloseable narCloseable = NarCloseable.withNarLoader()) { - baseAuthorizer.preDestruction(); - } - } - }; - } - - @Override - public Class getObjectType() { - return Authorizer.class; - } - - @Override - public boolean isSingleton() { - return true; - } - - @Override - public void destroy() throws Exception { - if (authorizer != null) { - authorizer.preDestruction(); - } - } - - public void setProperties(NiFiProperties properties) { - this.properties = properties; - } -} http://git-wip-us.apache.org/repos/asf/nifi/blob/8d8a9cba/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/java/org/apache/nifi/authorization/StandardAuthorizerConfigurationContext.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/java/org/apache/nifi/authorization/StandardAuthorizerConfigurationContext.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/java/org/apache/nifi/authorization/StandardAuthorizerConfigurationContext.java index 3010c92..fa205da 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/java/org/apache/nifi/authorization/StandardAuthorizerConfigurationContext.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/java/org/apache/nifi/authorization/StandardAuthorizerConfigurationContext.java @@ -29,10 +29,12 @@ import java.util.Map; public class StandardAuthorizerConfigurationContext implements AuthorizerConfigurationContext { private final String identifier; + private final String rootGroupId; private final Map<String, String> properties; - public StandardAuthorizerConfigurationContext(String identifier, Map<String, String> properties) { + public StandardAuthorizerConfigurationContext(String identifier, String rootGroupId, Map<String, String> properties) { this.identifier = identifier; + this.rootGroupId = rootGroupId; this.properties = Collections.unmodifiableMap(new HashMap<String, String>(properties)); } @@ -42,6 +44,11 @@ public class StandardAuthorizerConfigurationContext implements AuthorizerConfigu } @Override + public String getRootGroupId() { + return rootGroupId; + } + + @Override public Map<String, String> getProperties() { return properties; } http://git-wip-us.apache.org/repos/asf/nifi/blob/8d8a9cba/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/resources/nifi-framework-authorization-context.xml ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/resources/nifi-framework-authorization-context.xml b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/resources/nifi-framework-authorization-context.xml deleted file mode 100644 index 71bf684..0000000 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/resources/nifi-framework-authorization-context.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<beans default-lazy-init="true" - xmlns="http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> - - <!-- user/entity authorizer --> - <bean id="authorizer" class="org.apache.nifi.authorization.AuthorizerFactoryBean"> - <property name="properties" ref="nifiProperties"/> - </bean> - -</beans> http://git-wip-us.apache.org/repos/asf/nifi/blob/8d8a9cba/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/xsd/authorizers.xsd ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/xsd/authorizers.xsd b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/xsd/authorizers.xsd deleted file mode 100644 index 4b68b00..0000000 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-authorization/src/main/xsd/authorizers.xsd +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version="1.0"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> - <!-- role --> - <xs:complexType name="Authorizer"> - <xs:sequence> - <xs:element name="identifier" type="NonEmptyStringType"/> - <xs:element name="class" type="NonEmptyStringType"/> - <xs:element name="property" type="Property" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - - <!-- Name/Value properties--> - <xs:complexType name="Property"> - <xs:simpleContent> - <xs:extension base="xs:string"> - <xs:attribute name="name" type="NonEmptyStringType"></xs:attribute> - </xs:extension> - </xs:simpleContent> - </xs:complexType> - - <xs:simpleType name="NonEmptyStringType"> - <xs:restriction base="xs:string"> - <xs:minLength value="1"/> - </xs:restriction> - </xs:simpleType> - - <!-- users --> - <xs:element name="authorizers"> - <xs:complexType> - <xs:sequence> - <xs:element name="authorizer" type="Authorizer" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - </xs:complexType> - </xs:element> -</xs:schema> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/nifi/blob/8d8a9cba/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/authorizations.xml ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/authorizations.xml b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/authorizations.xml index 21815c0..6403d95 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/authorizations.xml +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/authorizations.xml @@ -56,12 +56,17 @@ /{type}/{id}/provenance - READ - allows user/entity to view provenance data from the underlying component - WRITE - NA --> -<resources> +<authorizations> <!-- - <resource identifier="/flow"> - <authorization identity="user-identity-1" action="R"></authorization> - <authorization identity="user-identity-2" action="W"></authorization> - <authorization identity="user-identity-3" action="RW"></authorization> - </resource> + <users> + <user identifier="1" identity="" /> + </users> + + <policies> + <policy identifier="1" resource="/flow" action="RW"> + <user identifier="1" /> + </policy> + </policies> --> -</resources> \ No newline at end of file + +</authorizations> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/nifi/blob/8d8a9cba/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/authorizers.xml ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/authorizers.xml b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/authorizers.xml index 2332b5e..74255dc 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/authorizers.xml +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/authorizers.xml @@ -23,6 +23,6 @@ <identifier>file-provider</identifier> <class>org.apache.nifi.authorization.FileAuthorizer</class> <property name="Authorizations File">./conf/authorizations.xml</property> - <property name="Reload Interval">30 secs</property> + <property name="Initial Admin Identity"></property> </authorizer> </authorizers> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/nifi/blob/8d8a9cba/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiConfiguration.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiConfiguration.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiConfiguration.java index 51fa7a2..2a714f8 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiConfiguration.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiConfiguration.java @@ -27,7 +27,7 @@ import org.springframework.context.annotation.ImportResource; @Import({NiFiWebApiSecurityConfiguration.class}) @ImportResource({"classpath:nifi-context.xml", "classpath:nifi-administration-context.xml", - "classpath:nifi-framework-authorization-context.xml", + "classpath:nifi-authorizer-context.xml", "classpath:nifi-cluster-manager-context.xml", "classpath:nifi-cluster-protocol-context.xml", "classpath:nifi-web-security-context.xml", http://git-wip-us.apache.org/repos/asf/nifi/blob/8d8a9cba/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/pom.xml ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/pom.xml b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/pom.xml index 289b763..ed74922 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/pom.xml +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/pom.xml @@ -39,6 +39,7 @@ <module>nifi-web</module> <module>nifi-resources</module> <module>nifi-documentation</module> + <module>nifi-authorizer</module> </modules> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/nifi/blob/8d8a9cba/nifi-nar-bundles/nifi-framework-bundle/pom.xml ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/pom.xml b/nifi-nar-bundles/nifi-framework-bundle/pom.xml index 27f7bd0..14593de 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/pom.xml +++ b/nifi-nar-bundles/nifi-framework-bundle/pom.xml @@ -113,6 +113,11 @@ <artifactId>nifi-file-authorizer</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> + <dependency> + <groupId>org.apache.nifi</groupId> + <artifactId>nifi-authorizer</artifactId> + <version>1.0.0-SNAPSHOT</version> + </dependency> </dependencies> </dependencyManagement> </project>
