2017-07-07 1 views
0

Je crée une application dans laquelle j'ai l'intention de prendre des données confidentielles de l'utilisateur. Mais pour les problèmes de débogage, je prévois d'enregistrer les valeurs comme pour quel nom d'utilisateur il y a un problème. Mais ne veux pas enregistrer leurs mots de passe.Annotation personnalisée pour données confidentielles

Je possède ce code exemple:

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(); 

Ceci est la classe exemple

@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; 
} 

Il y a deux façons que je pensais: Pour placer un le « mot de passe » dans une liste et vérification si getPropertyPath contient des valeurs de la liste et évite d'imprimer invalidValue.

Mais y at-il une annotation ou peut-il y avoir des annotations comme @Confidential où je peux éviter d'imprimer cette valeur.

Cela ne me dérangerait pas de créer une annotation personnalisée. J'ai pensé que de cette façon, il est beaucoup plus propre et je n'ai pas à écrire à chaque fois le nom de domaine que je vérifie en tant que confidentiel dans la liste.

Je pensais que de faire de cette façon:

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(); 

Toute réflexion sur la façon de créer cette annotation et vérifier ces scénarios?

Répondre

0

pensée d'une œuvre autour -

Sur mes POJO, j'ai placé une exception sur toString().

@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; 
} 

Et placé que cette logique:

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

et journal de placement pour quand je Dévorer les POJO pour valider et l'impression de l'erreur sur la validation (s'il y a une erreur) immédiatement après.