Heim  >  Artikel  >  Java  >  Strategiedesignmuster im Frühling

Strategiedesignmuster im Frühling

Patricia Arquette
Patricia ArquetteOriginal
2024-10-21 20:09:03201Durchsuche

Strategy Design Pattern in Spring

In Unternehmensanwendungen werden wir unterschiedliche Implementierungen entsprechend unseren Geschäftsanforderungen haben. Zur Laufzeit müssen wir eine davon basierend auf bestimmten Bedingungen ausführen. Gängige Beispiele sind Sortieralgorithmen, Datenverschlüsselung, Benachrichtigungsdienste, Authentifizierungsdienste, Zahlungsdienste ...

Anstatt if-else-Bedingungen zu verwenden, können wir zur Implementierung ein Strategieentwurfsmuster verwenden. Das Strategieentwurfsmuster hilft uns, verschiedene Implementierungen zur Laufzeit auszuführen/zu verwenden. Die Strategie bietet Code Wiederverwendbarkeit, Flexibilität, Belangetrennung und Erweiterbarkeit.

Bedenken Sie, dass Sie einen einheitlichen Authentifizierungsdienst entwickelt haben, der Anfragen von verschiedenen Kanälen/Kunden entgegennimmt. Zur Laufzeit müssen Sie basierend auf der Konfiguration entscheiden, welche Implementierung für Authentifizierungszwecke verwendet wird (dies könnte auch eine Anforderungsweiterleitung sein). Ihre Implementierungen können Okta, Azure Ad oder Your Own IAM sein.

Hinweis:Wir müssen Anbieter als unabhängige Module implementieren und sie als Abhängigkeit zum Hauptprojekt hinzufügen.

Strategieschnittstelle

public interface Authentication {

    AuthenticationRes authentication(AuthenticationReq authenticationReq);
    OtpDevicesRes otpDevices(OtpDevicesReq otpDevicesReq);
    SendOtpRes sendOtp(SendOtpReq sendOtpReq);
    VerifyOtpRes verifyOtp(VerifyOtpReq verifyOtpReq);

}

Konkrete Strategien

@Component("oktaAuthentication")
@Slf4j
public class OktaAuthentication implements Authentication {
    --------------
    --------------
    --------------
}

@Component("ferAuthentication")
@Slf4j
public class FerAuthentication implements Authentication {
      --------------
      --------------
      --------------
}

@Component("eapAuthentication")
@Slf4j
public class EapAuthentication implements Authentication {
      --------------
      --------------
      --------------
}

Service

@Service
@Slf4j
public class AuthenticationService {

    public Map<String, Authentication> authenticationProvidersMap;
    public Set<String> availableAuthProviders;

    public AuthenticationService(Map<String, Authentication> authenticationProvidersMap) {
        this.authenticationProvidersMap = authenticationProvidersMap;
        this.availableAuthProviders = this.authenticationProvidersMap.keySet();
        log.info("Available Auth providers:{}", this.availableAuthProviders);
    }

    public AuthenticationRes getAuthentication(AuthenticationReq authenticationReq, ClientDetails clientDetails) {

        //This method will identify authentication provider based on client details
        // and returns oktaAuthentication/eapAuthentication/ferAuthentication
        String authProvider = getAuthProviderDetails(clientDetails);

        if (this.availableAuthProviders.contains(authProvider)) {
            return this.authenticationProvidersMap.get(authProvider)
                    .authentication(authenticationReq);
        } else {
            throw new AuthProviderUnavailable(authProvider);
        }

    }


    public String getAuthProviderDetails(ClientDetails clientDetails) {
        // implement your business logic to return the provider that need to be used. 
    }
}

Wenn Sie Fragen haben, hinterlassen Sie bitte eine Frage im Kommentarbereich.

Das obige ist der detaillierte Inhalt vonStrategiedesignmuster im Frühling. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn