2017-07-07 12 views
0

私は、ユーザーの機密データを取得する予定のアプリケーションを作成しています。しかし、私はユーザ名のような問題があるような値を記録する予定ですデバッグの問題については。しかし、パスワードを記録したくない。機密データのカスタム注釈

私は、このサンプルコードを持っている: リストとチェックで「パスワード」を配置するには:これはサンプルクラス

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

ある

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

私は思った二つの方法がありますgetPropertyPathにリストからの値が含まれていて、invalidValueの印刷が行われない場合

しかし、注釈がありますか、@Confidentialのような注釈がありますが、この値を印刷しないようにすることができます。

私はカスタム注釈を作成しても構いません。私はこれがもっときれいだと思っていました。私はリストの中でConfidentialとしてチェックしているフィールド名を毎回書く必要はありません。

私はこの方法をやって考える:この注釈を作成して、これらのシナリオを確認する方法について

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

任意の考え?周りの仕事の

答えて

0

思考 -

私のPOJOで、私は)(の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; 
} 

そして、これだけの論理置か:

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

そして、私は直後(エラーがある場合)を検証し、検証でエラーを印刷するためのPOJOを消費したときのログを配置します。