2017-07-07 4 views
0

Ich erstelle eine Anwendung, wo ich vertrauliche Daten des Benutzers zu nehmen plane. Aber für Debugging-Probleme plane ich die Werte wie für welchen Benutzernamen ein Problem zu protokollieren. Aber nicht ihre Passwörter protokollieren wollen.Benutzerdefinierte Annotation für vertrauliche Daten

Ich habe diesen Beispielcode:

StringBuffer errorBuilder = new StringBuffer(); 
violations.forEach(v -> errorBuilder.append("\r\n\"") 
          .append(v.getPropertyPath()) 
          .append("\": ") 
          .append(v.getMessage()) 
          .append(" -- ") 
          .append(v.getInvalidValue())); // Avoid print here 
return errorBuilder.toString(); 

Dies ist die Beispielklasse

@Getter 
@Setter 
public class UserCredentials { 
    @NotNull 
    @Size(min=5, max=15) 
    private String username; 

    @NotNull 
    @Pattern(regex=Constants.Regex.PASSWORD) 
    private String password; 

    @NotNull 
    @Pattern(regex=Constants.Regex.DOB) 
    private String dob; 

    @NotNull 
    @Pattern(regex=Constants.Regex.EMAIL) 
    private String email; 
} 

Es gibt zwei Möglichkeiten, die ich dachte: Um das „Passwort“ in einer Liste und Kontrolle zu legen Wenn getPropertyPath Werte aus der Liste enthält und den Ausdruck invalidValue verhindert.

Aber gibt es eine Anmerkung oder kann es eine Anmerkung wie @Confidential geben, wo ich vermeiden kann, diesen Wert zu drucken.

Ich würde nichts dagegen haben, eine benutzerdefinierte Annotation zu erstellen. Ich dachte, auf diese Weise ist es viel sauberer und ich muss nicht immer den Feldnamen schreiben, den ich als vertraulich in der Liste überprüfe.

Ich dachte, auf diese Weise zu tun:

StringBuffer errorBuilder = new StringBuffer(); 
violations.forEach(v -> { 
if (v.getPropertyPath() has annotation @Confidential) { // Looking for this. 
    errorBuilder.append("\r\n\"") 
           .append(v.getPropertyPath()) 
           .append("\": ") 
           .append(v.getMessage()) 
} else { 
    errorBuilder.append("\r\n\"") 
           .append(v.getPropertyPath()) 
           .append("\": ") 
           .append(v.getMessage()) 
           .append(" -- ") 
           .append(v.getInvalidValue())); 
} 
}); 
return errorBuilder.toString(); 

Irgendwelche Gedanken darüber, wie diese Anmerkung zu erstellen und diese Szenarien überprüfen?

Antwort

0

Denken an einer Arbeit um -

Auf meinem POJOs, habe ich eine Ausnahme auf toString gesetzt().

@Getter 
@Setter 
@ToString(exclude="password") 
public class UserCredentials { 
    @NotNull 
    @Size(min=5, max=15) 
    private String username; 

    @NotNull 
    @Pattern(regex=Constants.Regex.PASSWORD) 
    private String password; 

    @NotNull 
    @Pattern(regex=Constants.Regex.DOB) 
    private String dob; 

    @NotNull 
    @Pattern(regex=Constants.Regex.EMAIL) 
    private String email; 
} 

Und nur diese Logik gelegt:

StringBuffer errorBuilder = new StringBuffer(); 
violations.forEach(v -> { 
    errorBuilder.append("\r\n\"") 
           .append(v.getPropertyPath()) 
           .append("\": ") 
           .append(v.getMessage()) 
}); 
return errorBuilder.toString(); 

und Bereitstellungsprotokoll, wenn ich die POJO für validate verbrauchen und das Drucken der Fehler auf der Validierung unmittelbar nach (wenn ein Fehler auftritt).

Verwandte Themen