CalvinKirs opened a new pull request, #40113:
URL: https://github.com/apache/doris/pull/40113

    ## abstract
   introduces the pluginization of the Authenticator component, enabling 
greater flexibility and modularity within the authentication system. By 
refactoring the Authenticator into a pluggable SPI (Service Provider 
Interface), we allow for custom authentication mechanisms to be seamlessly 
integrated and managed.
   
   ## Key Changes
   AuthenticatorFactory Interface:
   
   Defined a new AuthenticatorFactory interface to standardize the creation of 
Authenticator instances. The interface includes methods to create Authenticator 
instances based on configuration (ConfigBase) and to return a unique identifier 
for each factory (e.g., "ldap", "default"). The interface also provides a 
method getAuthenticatorConfig() to retrieve default configuration templates, 
aiding in the initialization process. Factory Identifier:
   
   Each AuthenticatorFactory implementation must provide a unique identifier. 
This allows for easy registration and retrieval of specific Authenticator 
implementations based on the factory identifier. Configuration Management:
   
   The getAuthenticatorConfig() method returns a ConfigBase instance, providing 
a default configuration that can be used or modified before creating an 
Authenticator. Benefits
   Modularity: Authentication logic is now decoupled from the core system, 
making it easier to extend and maintain. Flexibility: Different authentication 
strategies (e.g., LDAP, default, etc.) can be easily added or swapped without 
altering the core codebase. Customization: Users can define custom 
Authenticator implementations and configure them as needed, enabling a more 
tailored authentication process.
   
   ## eg
   
   In your Maven pom.xml, add the fe-core dependency:
   
   ```
           <dependency>
               <groupId>org.apache.doris</groupId>
               <artifactId>fe-core</artifactId>
               <version>1.2-SNAPSHOT</version>
               <scope>provided</scope>
           </dependency>
   
   ```
   
   ```
   import org.apache.doris.common.ConfigBase;
   
   public class LocalAuthenticatorFactory implements AuthenticatorFactory {
   
       @Override
       public Authenticator create(ConfigBase config) {
           // No need to use config for this simple example
           return new LocalAuthenticator();
       }
   
       @Override
       public String factoryIdentifier() {
           return "local";
       }
   
       @Override
       public ConfigBase getAuthenticatorConfig() {
           // Returning a new instance of LocalConfig, which could be 
customized if needed
           return new LocalConfig();
       }
   }
   import java.util.HashMap;
   import java.util.Map;
   
   public class LocalAuthenticator implements Authenticator {
       private Map<String, String> userStore = new HashMap<>();
   
       public LocalAuthenticator() {
           // Hardcoded usernames and passwords
           userStore.put("user1", "password1");
           userStore.put("user2", "password2");
           userStore.put("admin", "adminpass");
       }
   
       @Override
       public boolean authenticate(String username, String password) {
           // Authenticate by checking the hardcoded user store
           String storedPassword = userStore.get(username);
           return storedPassword != null && storedPassword.equals(password);
       }
   }
   import org.apache.doris.common.ConfigBase;
   
   public class LocalConfig extends ConfigBase {
       // Configuration options could be added here if needed
   }
   
   
   
   ```
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to