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]

Reply via email to