Signon password customization

This is and example file on how you can implement (Signon Password Custom) Profile Option in Oracle E-Business Suite (using note 393552.1)



CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "AppsPasswordValidationCUS" AS

package xxx;

import oracle.apps.fnd.security.PasswordValidation;</code>

/**

* Custom password validation.

*/

public class AppsPasswordValidationCUS implements PasswordValidation

{

/**

* toString.

* @return String classname@hashcode.

*/

public String toString()

{

return getClass().toString()+"@"+hashCode();

}

private java.util.ArrayList errorMessages = new java.util.ArrayList();

/**

* Constructor.

*/

public AppsPasswordValidationCUS()

{

}

/**

* getErrorStackApplicationName.

* @return String "FND".

*/

public String getErrorStackApplicationName()

{

return "FND";

}

/**

* getErrorStackMessageName.

* @return String Contains all error messages.

*/

public String getErrorStackMessageName()

{

StringBuffer sb = new StringBuffer();

for(int i=0;(i&lt;this.errorMessages.size() &amp;&amp; i&lt;1);i++)

{

sb.append((String) errorMessages.get(i));

sb.append(";");

}

return sb.toString();

}

/**

* main.

* @param args String[] arguments.

*/

public static void main(String[] args)

{

args.toString();

AppsPasswordValidationCUS validator = new AppsPasswordValidationCUS();

System.out.println(validator.validate("USERNAME", "Password0!"));

System.out.println(validator.getErrorStackMessageName());

}

/**

* validate.

* @param username String username.

* @param password String password.

* @return boolean True if password matches criteria. False otherwise.

*/

public boolean validate(String username, String password)

{

username.toString();

errorMessages = new java.util.ArrayList();

boolean result = false;

boolean containsUpperCase = false;

boolean containsLowerCase = false;

boolean containsNumeric = false;

boolean containsNonAlphaNumeric = false;

//check all characters of the string.

for(int i=0;i&lt;password.length();i++)

{

//get character at position.

char c = password.charAt(i);

if(!Character.isLetterOrDigit(c))

{

if(!containsNonAlphaNumeric)

{

containsNonAlphaNumeric = true;

}

}

else

{

if(!containsUpperCase &amp;&amp; Character.isUpperCase(c))

{

containsUpperCase = true;

}

else if(!containsLowerCase &amp;&amp; Character.isLowerCase(c))

{

containsLowerCase = true;

}

else if(!containsNumeric &amp;&amp; Character.isDigit(c))

{

containsNumeric = true;

}

}

}

if(!containsUpperCase)

{

this.errorMessages.add("PASSWORD-MISSING-UPPERCASE");

}

if(!containsLowerCase)

{

this.errorMessages.add("PASSWORD-MISSING-LOWERCASE");

}

if(!containsNumeric)

{

this.errorMessages.add("PASSWORD-MISSING-NUMERIC");

}

if(!containsNonAlphaNumeric)

{

this.errorMessages.add("MISSING-NON-ALPHANUMERIC");

}

if(containsUpperCase &amp;&amp; containsLowerCase &amp;&amp; containsNumeric &amp;&amp; containsNonAlphaNumeric)

{

result = true;

}

return result;

}

}

/

EXIT

Mon, 19 September