I have the standard validation working just fine. I have attempted to
branch out to use a custom validator for making sure that passwords follow a
certain set of rules. The custom validation method does not get called. I
set the logging to debug, but the output only confirmed that my method isn't
being called. Suggestions for how to debug further would be greatly
appreciated.
[log when standard validations fail]
DEBUG Date = 2003-05-27 12:22:54,543 [Thread-5]
org.apache.struts.action.RequestProcessor Line = 942 - Validation failed,
returning to '/gotochangepassword.do'
[log when standard validations pass - should call my validator]
DEBUG Date = 2003-05-27 12:19:14,939 [Thread-4]
org.apache.struts.action.RequestProcessor Line = 915 - No errors detected,
accepting input
Following are the relevant snippets of code:
Validator-rules.xml
--------------------------
<validator name="complexpassword"
classname="foo.SecurePasswordValidator"
method="validateComplexPassword"
methodparams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.changepasswordnotfollowrules">
</validator>
Validation.xml
-----------------
<form name="changePasswordForm">
<field property="newPassword"
depends="required,minlength,complexpassword">
<arg0 key="changepassword.newpassword" />
<arg1 name="minlength" key="${var:minlength}"
resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>8</var-value>
</var>
</field>
<field property="oldPassword" depends="required,minlength">
<arg0 key="changepassword.oldpassword" />
<arg1 name="minlength" key="${var:minlength}"
resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>8</var-value>
</var>
</field>
<field property="confirmnewPassword"
depends="required,minlength">
<arg0 key="changepassword.confirmpassword" />
<arg1 name="minlength" key="${var:minlength}"
resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>8</var-value>
</var>
</field>
</form>
Validation method
--------------------
public static boolean validateComplexPassword(
Object bean,
ValidatorAction va,
Field field,
ActionErrors errors,
HttpServletRequest request)
{
String value = null;
if (isString(bean))
{
value = (String)bean;
}
else
{
value = ValidatorUtil.getValueAsString(bean,
field.getProperty());
}
boolean upperCase = false;
boolean lowerCase = false;
boolean digit = false;
for (int i = 0; i < value.length(); i++)
{
if (Character.isLowerCase(value.charAt(i)))
{
lowerCase = true;
}
if (Character.isDigit(value.charAt(i)))
{
digit = true;
}
if (Character.isUpperCase(value.charAt(i)))
{
upperCase = true;
}
}
// verify that the new password has the requisite combination of
elements (1, A, a)
if (!(upperCase && lowerCase && digit))
{
errors.add(
field.getKey(),
Resources.getActionError(request, va, field));
return false;
}
return true;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]