登録 - パスワードの強度と規則

登録-パスワードの強度と規則

1. 概要

このクイックチュートリアルでは、proper password constraints during registrationを実装して表示する方法を見ていきます。 たとえば、パスワードには特殊文字が含まれているか、少なくとも8文字の長さが必要です。

強力なパスワードルールを使用できるようにしたいのですが、実際にはこれらのルールを手動で実装したくありません。 したがって、成熟したPassay libraryをうまく利用します。

2. カスタムパスワードの制約

まず、カスタム制約ValidPasswordを作成しましょう。

@Documented
@Constraint(validatedBy = PasswordConstraintValidator.class)
@Target({ TYPE, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
public @interface ValidPassword {

    String message() default "Invalid Password";

    Class[] groups() default {};

    Class[] payload() default {};

}

そしてそれをUserDtoで使用します:

@ValidPassword
private String password;

3. カスタムパスワードバリデーター

それでは、ライブラリを使用して、実際に手動で実装しなくても、強力なパスワードルールを作成しましょう。

パスワードバリデーターPasswordConstraintValidatorを作成し、パスワードのルールを定義します。

public class PasswordConstraintValidator implements ConstraintValidator {

    @Override
    public void initialize(ValidPassword arg0) {
    }

    @Override
    public boolean isValid(String password, ConstraintValidatorContext context) {
        PasswordValidator validator = new PasswordValidator(Arrays.asList(
           new LengthRule(8, 30),
           new UppercaseCharacterRule(1),
           new DigitCharacterRule(1),
           new SpecialCharacterRule(1),
           new NumericalSequenceRule(3,false),
           new AlphabeticalSequenceRule(3,false),
           new QwertySequenceRule(3,false),
           new WhitespaceRule()));

        RuleResult result = validator.validate(new PasswordData(password));
        if (result.isValid()) {
            return true;
        }
        context.disableDefaultConstraintViolation();
        context.buildConstraintViolationWithTemplate(
          Joiner.on(",").join(validator.getMessages(result)))
          .addConstraintViolation();
        return false;
    }
}

パスワードが無効な場合に備えて、we’re creating the new constraint violation hereとデフォルトのパスワードを無効にする方法に注意してください。

最後に、Passayライブラリをpomに追加しましょう。


    org.passay
    passay
    1.0

少し歴史的な情報として、Passayは由緒あるvt-passwordJavaライブラリの子孫です。

4. JSパスワードメーター

サーバー側が完了したので、クライアント側を見て、JavaScriptを使用して単純なPassword Strength” functionalityを実装しましょう。

単純なjQueryプラグイン–jQuery Password Strength Meter for Twitter Bootstrap –を使用して、パスワードの強度をregistration.htmlで表示します。





5. 結論

これで、クライアント側でパスワードの強度を示し、サーバー側で特定のパスワードルールを適用するためのシンプルですが非常に便利な方法です。

このチュートリアルのfull implementationは、the github projectにあります。これはEclipseベースのプロジェクトであるため、そのままインポートして実行するのは簡単です。