«1. Обзор

В этом кратком руководстве мы рассмотрим, как реализовать и показать правильные ограничения пароля во время регистрации. Например, пароль должен содержать специальный символ или иметь длину не менее 8 символов.

Мы хотим иметь возможность использовать мощные правила паролей, но мы не хотим реализовывать эти правила вручную. Итак, мы собираемся эффективно использовать зрелую библиотеку Passay.

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<? extends Payload>[] payload() default {};

}

И используем его в UserDto:

@ValidPassword
private String password;

3. Пользовательский валидатор пароля

Теперь — давайте воспользуемся библиотекой, чтобы создать несколько мощных правил паролей без необходимости вручную реализовывать какие-либо из них.

Мы создадим валидатор пароля PasswordConstraintValidator — и определим правила для пароля:

public class PasswordConstraintValidator implements ConstraintValidator<ValidPassword, String> {

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

Обратите внимание, как мы здесь создаем новое нарушение ограничения и отключаем также нарушение по умолчанию — – в случае, если пароль недействителен.

Наконец, давайте также добавим библиотеку Passay в нашу pom:

<dependency>
	<groupId>org.passay</groupId>
	<artifactId>passay</artifactId>
	<version>1.0</version>
</dependency>

Немного исторической информации: Passay является потомком почтенной Java-библиотеки vt-password.

4. Измеритель паролей JS

Теперь, когда серверная часть готова, давайте взглянем на клиентскую сторону и реализуем простую функцию «Надежность пароля» с помощью JavaScript.

Мы будем использовать простой плагин jQuery — jQuery Password Strength Meter for Twitter Bootstrap — чтобы показать надежность пароля в Registration.html:

<input id="password" name="password" type="password"/>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="pwstrength.js"></script>                  
<script type="text/javascript">
$(document).ready(function () {
    options = {
        common: {minChar:8},
        ui: {
            showVerdictsInsideProgressBar:true,
            showErrors:true,
            errorMessages:{
                wordLength: '<spring:message code="error.wordLength"/>',
                wordNotEmail: '<spring:message code="error.wordNotEmail"/>',
                wordSequences: '<spring:message code="error.wordSequences"/>',
                wordLowercase: '<spring:message code="error.wordLowercase"/>',
                wordUppercase: '<spring:message code="error.wordUppercase"/>',
                wordOneNumber: '<spring:message code="error.wordOneNumber"/>',
                wordOneSpecialChar: '<spring:message code="error.wordOneSpecialChar"/>'
            }
        }
    };
    $('#password').pwstrength(options);
});
</script>

5. Заключение

Вот и все â – простой, но очень полезный способ показать надежность пароля на стороне клиента и применить определенные правила паролей на стороне сервера.

Полную реализацию этого руководства можно найти в проекте github — это проект на основе Eclipse, поэтому его легко импортировать и запускать как есть.

Next »

Updating your Password

« Previous

Spring Security – Reset Your Password