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{ @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; } }
Обратите внимание, как мы создаем здесь новое нарушение ограничений и отключаем также ограничение по умолчанию – в случае, если пароль недействителен.
Наконец, давайте также добавим библиотеку Massey в наш pom:
org.passay passay 1.0
Для небольшой исторической информации, Пасси является потомком почтенной библиотеки vt-password Java.
4. Счетчик паролей JS
Теперь, когда на стороне сервера все готово, давайте взглянем на сторону клиента и реализуем простую “ Надежность пароля ” функциональность с помощью JavaScript.
Мы будем использовать простой плагин jQuery – Измеритель силы пароля jQuery для начальной загрузки Twitter – чтобы показать силу пароля в registration.html :
5. Заключение
И это все – простой, но очень полезный способ показать надежность пароля на стороне клиента и обеспечить соблюдение определенных правил пароля на стороне сервера.
Полную реализацию этого руководства можно найти в проекте github – это проект на основе Eclipse, поэтому его должно быть легко импортировать и запускать как есть.