【发布时间】:2013-07-12 07:11:10
【问题描述】:
我正在为密码策略编写代码。
政策规定您不能使用已使用的相同字母。 例如:密码 - 您不能使用密码,因为它有两个 's'
我该怎么做?
编辑:
这是我的完整实现:
private static final String PASSWORD_DUPLICATE_CHARACTERS = "^(?:([a-zA-Z])(?!.*\\1))$";
pattern = Pattern.compile(PASSWORD_DUPLICATE_CHARACTERS);
this.checkForDuplicateLetters(LDAPNewUserPassword);
private boolean checkForDuplicateLetters(final String newPassword) throws LDAPException{
LoggingEnt userEnt = new LoggingEnt();
String userid = userEnt.getUseridCode();
boolean foundDuplicate = false;
matcher = pattern.matcher(newPassword);
if (newPassword.matches(PASSWORD_DUPLICATE_LETTERS)){
foundDuplicate = true;
userEnt.setMsg1("Duplicate.");
throw new LDAPException("Invalid password combination for " + userid, LDAPException.INVALID_CREDENTIALS);//BAristo
} else {
userEnt.setMsg1("Your password has been successfully changed.");
}
return matcher.matches();
}
【问题讨论】:
-
这是您唯一的限制吗?或者您是否在单独的规则中实施了多个限制?
-
应该提一下,这对于密码策略来说不是一个好主意,因为它大大减少了搜索空间。
-
@Tim Pietzcker 没有。我已将其分解为几个序列,以使其他程序员在我离开后仍能阅读代码。
标签: java regex string character match