2017-10-03 4 views
2

Ich habe einen Springboot-Microservice, der grundlegende Authentifizierungsdaten benötigt, dh feste Benutzerkennung/Passwort (wie Admin/Passwort). Ich benutze Spring Cloud Netflix-Ökosystem, um Microservices zu orchestrieren. Zuul ist mein API-Gateway.ZUUL Basis-Authentifizierung an nachgelagerte Anwendung senden

Meine Frage, wie grundlegende Authentifizierungsdetails von Zuul an meine Anwendung gesendet werden, so dass beim Zugriff über Zuul nicht nach Benutzer-ID/Passwort gefragt wird.

Antwort

1

Sie können einen benutzerdefinierten Filter hinzufügen und der Anforderung den Autorisierungsheader hinzufügen.
Der Authorization-Header ist einfach Base64-codiert "Benutzername: Passwort" -String.

public class AuthenticatedFilter extends ZuulFilter { 

    @Override 
    public String filterType() { 
    return "pre"; 
    } 

    @Override 
    public int filterOrder() { 
    return 10; 
    } 

    @Override 
    public boolean shouldFilter() { 
    return true; 
    } 

    @Override 
    public Object run() { 
    RequestContext ctx = RequestContext.getCurrentContext(); 
    String auth = "username" + ":" + "password"; 
    byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("ISO-8859-1"))); 
    String authValue = "Basic " + new String(encodedAuth); 
    ctx.addZuulRequestHeader(HttpHeaders.AUTHORIZATION, authValue);   
    return null; 
    } 
} 

EDIT: Sie müssen auch die Bean für diesen Filter für Zuul erstellen, um es aufzunehmen. So in der Konfiguration Klasse/Main Anwendungsklasse, fügt:

@Bean 
public AuthenticatedFilter getAuthenticatedFilter() { 
    return new AuthenticatedFilter(); 
} 
+0

Danke, wird versuchen, das aber, wie Benutzer-ID und das Kennwort als Teil des Authorization-Header zu senden? – Debopam

+0

Ich aktualisierte meine Antwort. Ich kurz, für die Generierung der Benutzer-ID und Passwort Teil der Kopfzeile, einfach Base64 Codierung der "Benutzername: Passwort" -String. – pan

+0

Sie können auch StandardCharsets verwenden – rj2700