Перейти к основному содержимому

Регистрация – Надежность пароля и правила

· 3 мин. чтения

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 для 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, поэтому его легко импортировать и запускать как есть.