EBS 如何实现自定义密码规则

作者:郑德鼎 约 3 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, SD, 开发, 销售分销
目录

张玉&朱涛

EBS如何实现自定义密码规则?

原创 张玉&朱涛 爱记不记的记忆碎片

问 题

客户公司要求对EBS用户登录密码进行规范管理,提高密码复杂度,从而提高密码安全性。要求如下:

至少使用数字、大写英文字母、小写英文字母、特殊字符中的三种。当不满足情况时,报错提示。

答 案

我们在之前一期《EBS如何实现密码规则安全管理》介绍了R12标准功能对密码规则的设置。这一期我们来介绍一下如何实现自定义密码规则。

功能实现

场景回顾:

Password should contain at least 3 of the following 4 cases

a) Upper case letters(e.g., A,B,C,......Z)

b) Lower case letters(e.g., a,b,c,......z)

c) Numbers(e.g., 0,1,2,......9)

d) Special characters(e.g., ?,!,%,$,#,etc.)

Step1. Developing your own custom class file XXCustPasswordRules.java

put the custom class file in the Middle tier code tree under any directory under CLASSPATH containing oracle/apps/fnd/security sub directory.

package oracle.apps.fnd.security;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import oracle.apps.fnd.common.VersionInfo;

// Referenced classes of package oracle.apps.fnd.security

// PasswordValidation

public class XXCustPasswordRules

implements PasswordValidation

{

public String getErrorStackApplicationName()

{

return "XXWA";

}

public String getErrorStackMessageName()

{

return m_errorStackMessageName;

}

public boolean validate(String username, String password)

{

/* Validates username = password */

//        if(validateNoUsername(username, password))

//        {

//            m_errorStackMessageName = "XXCUST_USR_PWD_SAME";

//            return false;

//        }

//

//        /* Check for repeated characters */

//        if(!validateNoRepeats(password.toLowerCase()))

//        {

//            m_errorStackMessageName = "XXCUST_REPEAT_CHAR";

//            return false;

//        }

//        /* Checks password contains XXCUST  */

//        if (validatePasswordNotContainsPattern(password,"XXCUST"))

//        {

//            m_errorStackMessageName = "XXCUST_INVALID_WORD";

//            return false;

//        }

/* Checks following rules

1) Contains A-Z

2) Contains a-z

3) Contains 0-9

4) Contains ?!%$#

5) Should satisfy above 3 rules */

if (!validatePassword(password))

{

m_errorStackMessageName = "XXCUST_PWD_RULE_CLASSES";

return false;

}

return true;

}

/* Checks for a pattern match */

private boolean hasPattern(String p_password,String p_pattern)

{

Pattern p = Pattern.compile(p_pattern);

Matcher m = p.matcher(p_password);

if (m.find())

return true;

else

return false;

}

/* Implements following rules

1) Contains A-Z

2) Contains a-z

3) Contains 0-9

4) Contains ?!%$#

*/

private boolean validatePassword(String password)

{

int count=0;

if (hasPattern(password,"[A-Z]"))

count++;

if (hasPattern(password,"[a-z]"))

count++;

if (hasPattern(password,"[0-9]"))

count++;

if (hasPattern(password,"[`~!@#$^&*()=|{}':;',\\\\[\\\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?%+_]"))

count++;

if (count<3)

return false;

else

return true;

}

/* Validates password does not contain pattern  */

private boolean validatePasswordNotContainsPattern(String password,String pattern)

{

if (password.toLowerCase().contains(pattern.toLowerCase()))

return true;

else

return false;

}

/* Validate username = password */

private boolean validateNoUsername(String p_username, String p_password)

{

if (p_username.toLowerCase().equals(p_password.toLowerCase()))

return true;

else

return false;

}

boolean validateNoRepeats(String p_password)

{

for(int i = 1; i < p_password.length(); i++)

if(p_password.charAt(i) == p_password.charAt(i - 1))

return false;

return true;

}

private String m_errorStackMessageName;

}

Step2. Run the following command:

loadjava -user apps/ APPSPASSWORD -verbose -resolve -force XXCustPasswordRules.java

Step3. You can execute the following select after running the loadjava command to verify that load was successful and class is valid.

SELECT   dbms_java.longname(object_name), status

FROM   user_objects

WHERE   object_type = 'JAVA CLASS'

AND   dbms_java.longname(object_name) LIKE '%XXCustPasswordRules';

Step4.Update the profile Signon Password Custom with 'oracle.apps.fnd.security.XXCustPasswordRules' in Site level

Step5. If you want to customize the error message presented, implement following steps:

1) Go to 'Application Developer' > Application > Messages

2) set message :XXCUST_PWD_RULE_CLASSES

XXCUST_PWD_RULE_CLASSES

Password should contain at least 3 of the following 4 cases

a) Upper case letters(e.g., A,B,C,......Z)

b) Lower case letters(e.g., a,b,c,......z)

c) Numbers(e.g., 0,1,2,......9)

d) Special characters(e.g., ?,!,%,$,#,etc.)

3) submit request: Generate Messages

效果:

作者丨张玉&朱涛

审核丨陆   觉

编辑丨王   锐

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「EBS如何实现自定义密码规则.docx」整理生成,仅用于内部技术分享与学习交流。