WCP 11gR1: Change the Password Programmatically

Recently we implemented a Custom Interface for changing the password in a WebCenter Portal 11.1.1.8 environment. Here I am sharing some of the code to achieve it (taken from WebCenter API).

Java Code Snippet:

public void setPassword(ActionEvent event) {
    String METHOD_NAME = "setPassword";
    logger.entering(CLASS_NAME, "setPassword");
    final String userName = WebCenterSecurityUtils.getUserName();
    try {
      FacesContext fCtx = FacesContext.getCurrentInstance();
      Application app = fCtx.getApplication();
      // This managed bean returns if the Change Password is allowed in WebCenter
   boolean allowPasswordChange = ((Boolean)ADFContext.getCurrent().getExpressionEvaluator().evaluate("#{o_w_wa_i_v_b_changePasswordBean.passwordChangeAllowed}")).booleanValue()
      if (!allowPasswordChange) {
        logger.fine(CLASS_NAME, "setPassword", "skipping passwd change as admin has disabled it");
        WCApplicationContext.getCurrentInstance().displayWarning(WebCenterResourceBundle.class.getCanonicalName(), "PREFERENCE_PASSWORD_DISABLED", null);
      }
      else {
        String oldPassword = getOldPassword();
        String newPassword = getNewPassword();
        if (logger.isFiner()) {
          logger.finer(CLASS_NAME, "setPassword", "Changing the password for useName = " + userName);
        }
        WebCenterSecurityUtils.setPassword(userName, oldPassword, newPassword);
        setOldPassword("");
        setNewPassword("");
        setNewPasswordConfirm("");
        if (logger.isFiner()) {
          logger.finer(CLASS_NAME, "setPassword", "After invoking method binding object for service using EL: #{bindings.setUserPassword.execute}");
        }
      }
    }
    catch (Exception ex) {
      WebCenterException wex;
      if ((ex instanceof WebCenterException)) {
        wex = (WebCenterException)ex;
      } else {
        wex = new WebCenterException("Unable to set the password");
      }
      WCApplicationContext.getCurrentInstance().displayError(wex);
    }
    finally {
      logger.exiting(CLASS_NAME, "setPassword");
    }
}

As you can see in the code above, the important 

JSFF Snippet:

<af:panelFormLayout labelWidth="200" rows="3" maxColumns="1"
     partialTriggers="save" id="pfl1">
 <af:inputText label="Old Password"
    value="#{backingBeanScope.myPasswordBean.oldPassword}"
    secret="true"
    validator="#{webcenterValidator.oldPasswordValidator}"
    required="true" id="it1"/>
 <af:spacer height="10" id="s3"/>
 <af:inputText label="New Password"
    value="#{backingBeanScope.myPasswordBean.newPassword}"
    secret="true"
    validator="#{webcenterValidator.newPasswordValidator}"
    required="true" id="it2"/>
 <af:spacer height="10" id="s4"/>
 <af:inputText label="Confirm New Password"
    value="#{backingBeanScope.myPasswordBean.newPasswordConfirm}"
    secret="true"
    validator="#{webcenterValidator.newPasswordConfirmValidator}"
   required="true" id="it3"/>
</af:panelFormLayout>
<af:commandButton id="save" partialSubmit="true"
                          text="Save"
                          actionListener="#{backingBeanScope.myPasswordBean.setPassword}"/>

Note: Remember that your LDAP has to be conigured with the rights for allowing users to change the password.

TIP: Validators where not included in this post, but it is using the defined by WebCenter ;).

Comments

  1. Hi Daneil, Thanks for the example, can you plz suggest me what is the library/jar name for WebCenterSecurityUtils ?

    ReplyDelete

Post a Comment

Popular posts from this blog

OJET: Inter-Module communication in TypeScript Template

OJET: Build and Deploy in an Application Server

OJET: Select All options using only Checkboxset