Passay密码,无需重复字符序列

时间:2019-06-28 22:03:03

标签: java security passwords

我正在使用passay库根据一系列要求验证密码:

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

我的要求之一是,密码中不得包含紧随其后的任何字符序列。例如:

  • 苹果:应该被拒绝,因为'p'之后是另一个'p'。
  • 香蕉:应该被拒绝,因为“ an”后跟“ an”。
  • 123xy123 :可以,因为不会立即在“ 123”后跟“ 123”。

我尝试使用RepeatCharactersRulejavadocs),但是该Rule仅适用于相同字符的序列(它将找到'aaa',而不是'abab')。

密码是否有执行此操作的规则,或者我必须编写自定义规则?

1 个答案:

答案 0 :(得分:1)

嗯,我不认为这样做,但是您不必编写自己的规则,如果需要,请尝试以下操作:

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());
    }
}