2016-07-31 18 views
0

In meiner Dienstschicht habe ich Methode Weicht Updates E-Mail:Encapsulating der Service-Schicht von Passwort Encoder

@Override 
public void updateUserEmail(String email, String newEmail, String password) throws InvalidPasswordException, DuplicateEmailException { 

    Client client = getSpecializedUserByEmail(email); 
     /*....*/ 
} 

Passwort - wird vom Benutzer eingegeben, aber zu überprüfen, ob es zu realen übereinstimmt, muß ich verwenden BCryptPasswordEncoder in meiner Service-Schicht - aber es ist Verletzung der Kapselung der Service-Schicht. Ich kann die Überprüfung des Passworts im Controller verwenden - aber es ist eine schlechte Übung. Hilfe bitte, ich werde sehr dankbar sein)

Antwort

1

Ich bin mir nicht sicher, warum Sie denken, dass die Verwendung von BCryptPasswordEncoder in einem Dienst Kapselung brechen würde. Wenn Sie jedoch meinen Service-Layer wirklich von Bibliotheken von Drittanbietern isolieren möchten, können Sie eine Schnittstelle zum Codieren des Kennworts erstellen und diese dann mit Ihrer eigenen Klasse implementieren, die BCryptPasswordEncoder umschließt und injiziert Diese Implementierung in Ihr Serviceobjekt, wobei das Serviceobjekt nur die Schnittstelle sieht und importiert.

Auf diese Weise ist Ihr Serviceobjekt sehr lose mit dem Encoder verbunden, und die interne Implementierung des Encoders kann geändert werden, ohne das Serviceobjekt zu beeinträchtigen.

+0

Vielen Dank :) – Yuriy