NIFI-8783 Moved SingleUserAuthorizer Login Provider check to initialize() (#5216)

diff --git a/nifi-nar-bundles/nifi-single-user-iaa-providers-bundle/nifi-single-user-iaa-providers/src/main/java/org/apache/nifi/authorization/single/user/SingleUserAuthorizer.java b/nifi-nar-bundles/nifi-single-user-iaa-providers-bundle/nifi-single-user-iaa-providers/src/main/java/org/apache/nifi/authorization/single/user/SingleUserAuthorizer.java
index 1f78a41..9aeb130 100644
--- a/nifi-nar-bundles/nifi-single-user-iaa-providers-bundle/nifi-single-user-iaa-providers/src/main/java/org/apache/nifi/authorization/single/user/SingleUserAuthorizer.java
+++ b/nifi-nar-bundles/nifi-single-user-iaa-providers-bundle/nifi-single-user-iaa-providers/src/main/java/org/apache/nifi/authorization/single/user/SingleUserAuthorizer.java
@@ -53,6 +53,8 @@
 
     private static final String BLANK_PROVIDER = "provider";
 
+    private NiFiProperties niFiProperties;
+
     /**
      * Set NiFi Properties using method injection
      *
@@ -60,14 +62,7 @@
      */
     @AuthorizerContext
     public void setProperties(final NiFiProperties niFiProperties) {
-        final File configuration = niFiProperties.getLoginIdentityProviderConfigurationFile();
-        final String identifier = niFiProperties.getProperty(NiFiProperties.SECURITY_USER_LOGIN_IDENTITY_PROVIDER, BLANK_PROVIDER);
-        if (isSingleUserLoginIdentityProviderConfigured(identifier, configuration)) {
-            LOGGER.debug("Required Login Identity Provider Configured [{}]", REQUIRED_PROVIDER);
-        } else {
-            final String message = String.format("%s requires %s to be configured", getClass().getSimpleName(), REQUIRED_PROVIDER);
-            throw new AuthorizerCreationException(message);
-        }
+        this.niFiProperties = niFiProperties;
     }
 
     @Override
@@ -75,9 +70,27 @@
         return AuthorizationResult.approved();
     }
 
+    /**
+     * Initialize Provider and confirm that the Single User Login Identity Provider is also configured
+     *
+     * @param initializationContext Initialization Context
+     */
     @Override
     public void initialize(final AuthorizerInitializationContext initializationContext) {
         LOGGER.info("Initializing Authorizer");
+
+        final String securityUserAuthorizer = niFiProperties.getProperty(NiFiProperties.SECURITY_USER_AUTHORIZER);
+        final String authorizerIdentifier = initializationContext.getIdentifier();
+        if (authorizerIdentifier.equals(securityUserAuthorizer)) {
+            final File configuration = niFiProperties.getLoginIdentityProviderConfigurationFile();
+            final String identifier = niFiProperties.getProperty(NiFiProperties.SECURITY_USER_LOGIN_IDENTITY_PROVIDER, BLANK_PROVIDER);
+            if (isSingleUserLoginIdentityProviderConfigured(identifier, configuration)) {
+                LOGGER.debug("Required Login Identity Provider Configured [{}]", REQUIRED_PROVIDER);
+            } else {
+                final String message = String.format("%s requires %s to be configured", getClass().getSimpleName(), REQUIRED_PROVIDER);
+                throw new AuthorizerCreationException(message);
+            }
+        }
     }
 
     @Override
diff --git a/nifi-nar-bundles/nifi-single-user-iaa-providers-bundle/nifi-single-user-iaa-providers/src/test/java/org/apache/nifi/authorization/single/user/SingleUserAuthorizerTest.java b/nifi-nar-bundles/nifi-single-user-iaa-providers-bundle/nifi-single-user-iaa-providers/src/test/java/org/apache/nifi/authorization/single/user/SingleUserAuthorizerTest.java
index db0fbb8..ac46b17 100644
--- a/nifi-nar-bundles/nifi-single-user-iaa-providers-bundle/nifi-single-user-iaa-providers/src/test/java/org/apache/nifi/authorization/single/user/SingleUserAuthorizerTest.java
+++ b/nifi-nar-bundles/nifi-single-user-iaa-providers-bundle/nifi-single-user-iaa-providers/src/test/java/org/apache/nifi/authorization/single/user/SingleUserAuthorizerTest.java
@@ -16,10 +16,14 @@
  */
 package org.apache.nifi.authorization.single.user;
 
+import org.apache.nifi.authorization.AuthorizerInitializationContext;
 import org.apache.nifi.authorization.exception.AuthorizerCreationException;
 import org.apache.nifi.util.NiFiProperties;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import java.net.URISyntaxException;
 import java.nio.file.Path;
@@ -27,7 +31,9 @@
 import java.util.Properties;
 
 import static org.junit.Assert.assertThrows;
+import static org.mockito.Mockito.when;
 
+@RunWith(MockitoJUnitRunner.class)
 public class SingleUserAuthorizerTest {
     private static final String BLANK_PROVIDERS = "/conf/login-identity-providers.xml";
 
@@ -37,41 +43,67 @@
 
     private static final String UNSUPPORTED_PROVIDER_IDENTIFIER = "unsupported-provider";
 
+    private static final String AUTHORIZER_IDENTIFIER = "single-user-authorizer";
+
+    private static final String OTHER_AUTHORIZER_IDENTIFIER = "other-authorizer";
+
     private static final String EMPTY_PROPERTIES_PATH = "";
 
     private SingleUserAuthorizer authorizer;
 
+    @Mock
+    private AuthorizerInitializationContext initializationContext;
+
     @Before
     public void setAuthorizer() {
         authorizer = new SingleUserAuthorizer();
+        when(initializationContext.getIdentifier()).thenReturn(AUTHORIZER_IDENTIFIER);
     }
 
     @Test
-    public void testSetPropertiesSingleUserIdentityProviderConfigured() throws URISyntaxException {
+    public void testInitializeSingleUserAuthorizerNotConfigured() throws URISyntaxException {
         final Path providersPath = Paths.get(getClass().getResource(BLANK_PROVIDERS).toURI());
         final Properties properties = new Properties();
         properties.put(NiFiProperties.LOGIN_IDENTITY_PROVIDER_CONFIGURATION_FILE, providersPath.toString());
         properties.put(NiFiProperties.SECURITY_USER_LOGIN_IDENTITY_PROVIDER, PROVIDER_IDENTIFIER);
+        properties.put(NiFiProperties.SECURITY_USER_AUTHORIZER, OTHER_AUTHORIZER_IDENTIFIER);
         final NiFiProperties niFiProperties = NiFiProperties.createBasicNiFiProperties(EMPTY_PROPERTIES_PATH, properties);
         authorizer.setProperties(niFiProperties);
+        authorizer.initialize(initializationContext);
     }
 
     @Test
-    public void testSetPropertiesSingleUserIdentityProviderNotSpecified() throws URISyntaxException {
+    public void testInitializeSingleUserIdentityProviderConfigured() throws URISyntaxException {
         final Path providersPath = Paths.get(getClass().getResource(BLANK_PROVIDERS).toURI());
         final Properties properties = new Properties();
         properties.put(NiFiProperties.LOGIN_IDENTITY_PROVIDER_CONFIGURATION_FILE, providersPath.toString());
+        properties.put(NiFiProperties.SECURITY_USER_LOGIN_IDENTITY_PROVIDER, PROVIDER_IDENTIFIER);
+        properties.put(NiFiProperties.SECURITY_USER_AUTHORIZER, AUTHORIZER_IDENTIFIER);
         final NiFiProperties niFiProperties = NiFiProperties.createBasicNiFiProperties(EMPTY_PROPERTIES_PATH, properties);
-        assertThrows(AuthorizerCreationException.class, () -> authorizer.setProperties(niFiProperties));
+        authorizer.setProperties(niFiProperties);
+        authorizer.initialize(initializationContext);
     }
 
     @Test
-    public void testSetPropertiesAuthorizerCreationException() throws URISyntaxException {
+    public void testInitializeSingleUserIdentityProviderNotSpecified() throws URISyntaxException {
+        final Path providersPath = Paths.get(getClass().getResource(BLANK_PROVIDERS).toURI());
+        final Properties properties = new Properties();
+        properties.put(NiFiProperties.LOGIN_IDENTITY_PROVIDER_CONFIGURATION_FILE, providersPath.toString());
+        properties.put(NiFiProperties.SECURITY_USER_AUTHORIZER, AUTHORIZER_IDENTIFIER);
+        final NiFiProperties niFiProperties = NiFiProperties.createBasicNiFiProperties(EMPTY_PROPERTIES_PATH, properties);
+        authorizer.setProperties(niFiProperties);
+        assertThrows(AuthorizerCreationException.class, () -> authorizer.initialize(initializationContext));
+    }
+
+    @Test
+    public void testInitializeAuthorizerCreationException() throws URISyntaxException {
         final Path providersPath = Paths.get(getClass().getResource(UNSUPPORTED_PROVIDERS).toURI());
         final Properties properties = new Properties();
         properties.put(NiFiProperties.LOGIN_IDENTITY_PROVIDER_CONFIGURATION_FILE, providersPath.toString());
         properties.put(NiFiProperties.SECURITY_USER_LOGIN_IDENTITY_PROVIDER, UNSUPPORTED_PROVIDER_IDENTIFIER);
+        properties.put(NiFiProperties.SECURITY_USER_AUTHORIZER, AUTHORIZER_IDENTIFIER);
         final NiFiProperties niFiProperties = NiFiProperties.createBasicNiFiProperties(EMPTY_PROPERTIES_PATH, properties);
-        assertThrows(AuthorizerCreationException.class, () -> authorizer.setProperties(niFiProperties));
+        authorizer.setProperties(niFiProperties);
+        assertThrows(AuthorizerCreationException.class, () -> authorizer.initialize(initializationContext));
     }
 }