Creating your own password validator
You can create your own password validator.
Conditions:
- The new password validator class must implement the "PasswordValidator" interface.
- The new password validator class must be declared under the package "com.openkm.validator.password".
Password validator interface:
package com.openkm.validator.password;
import com.openkm.validator.ValidatorException;
public interface PasswordValidator {
/**
* Validate
*
* @param password
* @throws ValidatorException
*/
void Validate(String password) throws ValidatorException;
}
From password validator class you can use several configuration parameters:
- Config.PROPERTY_VALIDATOR_PASSWORD to return value of parameter "validator.password".
- Config.PROPERTY_VALIDATOR_PASSWORD_MIN_LENGTH to return value of parameter "validator.password.min.length".
- Config.PROPERTY_VALIDATOR_PASSWORD_MAX_LENGTH to return value of parameter "validator.password.max.length".
- Config.PROPERTY_VALIDATOR_PASSWORD_MIN_LOWERCASE to return value of parameter "validator.password.min.lowercase".
- Config.PROPERTY_VALIDATOR_PASSWORD_MIN_UPPERCASE to return value of parameter "validator.password.min.uppercase".
- Config.PROPERTY_VALIDATOR_PASSWORD_MIN_DIGITS to return value of parameter "validator.password.min.digits".
- Config.PROPERTY_VALIDATOR_PASSWORD_MIN_SPECIAL to return value of parameter "validator.password.mini.special".
More information at Password validation configuration.
Sample
CompletePasswordValidator class:
package com.openkm.validator.password;
import com.openkm.core.Config;
import com.openkm.validator.ValidatorException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Complex password validator
*/
public class CompletePasswordValidator implements PasswordValidator {
@SuppressWarnings("unused")
private static Logger log = LoggerFactory.getLogger(CompletePasswordValidator.class);
@Override
public void Validate(String password) throws ValidatorException {
validateLength(password);
checkLowerCase(password);
checkUpperCase(password);
checkDigits(password);
checkSpecial(password);
}
/**
* Validate length
*/
private void validateLength(String password) throws ValidatorException {
if (Config.VALIDATOR_PASSWORD_MIN_LENGTH > 0
&& password.length() < Config.VALIDATOR_PASSWORD_MIN_LENGTH) {
throw new ValidatorException(Config.VALIDATOR_PASSWORD_ERROR_MIN_LENGTH);
}
if (Config.VALIDATOR_PASSWORD_MAX_LENGTH > 0
&& password.length() > Config.VALIDATOR_PASSWORD_MAX_LENGTH) {
throw new ValidatorException(Config.VALIDATOR_PASSWORD_ERROR_MAX_LENGTH);
}
}
/**
* Validate lowercase characters
*/
private void checkLowerCase(String password) throws ValidatorException {
int count = 0;
if (Config.VALIDATOR_PASSWORD_MIN_LOWERCASE > 0) {
for (int i = 0; i < password.length(); i++) {
if (Character.isLowerCase(password.charAt(i))) {
count++;
}
}
if (Config.VALIDATOR_PASSWORD_MIN_LOWERCASE > count) {
throw new ValidatorException(Config.VALIDATOR_PASSWORD_ERROR_MIN_LOWERCASE);
}
}
}
/**
* Validate uppercase characters
*/
private void checkUpperCase(String password) throws ValidatorException {
int count = 0;
if (Config.VALIDATOR_PASSWORD_MIN_UPPERCASE > 0) {
for (int i = 0; i < password.length(); i++) {
if (Character.isUpperCase(password.charAt(i))) {
count++;
}
}
if (Config.VALIDATOR_PASSWORD_MIN_UPPERCASE > count) {
throw new ValidatorException(Config.VALIDATOR_PASSWORD_ERROR_MIN_UPPERCASE);
}
}
}
/**
* Validate digits
*/
private void checkDigits(String password) throws ValidatorException {
int count = 0;
if (Config.VALIDATOR_PASSWORD_MIN_DIGITS > 0) {
for (int i = 0; i < password.length(); i++) {
if (Character.isDigit(password.charAt(i))) {
count++;
}
}
if (Config.VALIDATOR_PASSWORD_MIN_DIGITS > count) {
throw new ValidatorException(Config.VALIDATOR_PASSWORD_ERROR_MIN_DIGITS);
}
}
}
/**
* Validate special characters
*/
private void checkSpecial(String password) throws ValidatorException {
int count = 0;
if (Config.VALIDATOR_PASSWORD_MIN_SPECIAL > 0) {
for (int i = 0; i < password.length(); i++) {
if (!Character.isLetterOrDigit(password.charAt(i))
&& !Character.isWhitespace(password.charAt(i))) {
count++;
}
}
if (Config.VALIDATOR_PASSWORD_MIN_SPECIAL > count) {
throw new ValidatorException(Config.VALIDATOR_PASSWORD_ERROR_MIN_SPECIAL);
}
}
}
}