Пароль Passay без повторения последовательности символов - PullRequest
2 голосов
/ 29 июня 2019

Я использую библиотеку passay для проверки пароля по списку требований:

<dependencies>
  <dependency>
    <groupId>org.passay</groupId>
    <artifactId>passay</artifactId>
    <version>1.4.0</version>
  </dependency>
</dependencies>

Одно из моих требований заключается в том, что пароль не должен иметь никакой последовательности символов, за которой сразу следует одна и та же последовательность.Например:

  • яблоко : должно быть отклонено, потому что за «p» следует другое «p».
  • банан : следуетбыть отклоненным, потому что за «an» следует «an».
  • 123xy123 : все в порядке, потому что за «123» сразу же не следует «123».

Я пытался использовать RepeatCharactersRule ( javadocs ), но это правило только для последовательности из тех же символов (он найдет «aaa», но не «abab»).

Делаету passay есть какое-либо правило для этого или мне придется написать собственное правило?

1 Ответ

1 голос
/ 29 июня 2019

Ну, я не думаю, что это так, но вам не нужно писать свое собственное правило, попробуйте это, если хотите:

public class RepeatingSequenceRegexTest {
    final PasswordValidator validator = new PasswordValidator(
            new IllegalRegexRule("(.{1,})\\1")
    );

    @Test
    public void checks() {
        assertTrue(validator.validate(new PasswordData("normal")).isValid());
        assertTrue(validator.validate(new PasswordData("abcdef")).isValid());
        assertTrue(validator.validate(new PasswordData("abacadaeaf")).isValid());
        assertTrue(validator.validate(new PasswordData("xyzxy")).isValid());
        assertTrue(validator.validate(new PasswordData("12345")).isValid());
        assertTrue(validator.validate(new PasswordData("121314")).isValid());
        assertTrue(validator.validate(new PasswordData("1234123121")).isValid());
        assertTrue(validator.validate(new PasswordData("123xy123")).isValid());
        assertTrue(validator.validate(new PasswordData("1")).isValid());
        assertTrue(validator.validate(new PasswordData("")).isValid());

        assertFalse(validator.validate(new PasswordData("apple")).isValid());
        assertFalse(validator.validate(new PasswordData("banana")).isValid());
        assertFalse(validator.validate(new PasswordData("112233")).isValid());
        assertFalse(validator.validate(new PasswordData("123123")).isValid());
        assertFalse(validator.validate(new PasswordData("1212")).isValid());
        assertFalse(validator.validate(new PasswordData("11")).isValid());
        assertFalse(validator.validate(new PasswordData("123xy123xy")).isValid());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...