OIM 11g Custom ADF Application Development
In this post , I will cover the steps required to create a custom ADF web application.
What this application does is facilitate Account Claim Process.
Users has been migrated from some other IAM product to OIM and exist in disabled state and hence cannot login to perform Self Service operations.
User needs to identify themselves by providing their personal details like personal identification number, zip code and dob etc.
After successfully Identifying themselves they will be able to set a new password and set their challenge questions and answers.
During this process the application will activate their account and set the new password and QnA.
At the end of the process, they will be able to login OIM with their new password set.
The application has been developed using JDeveloper using ADF technology to render user interfaces and MVC design pattern to keep the concerns separate.
Application Structure
web.xml
adfc-config.xml
adfc-config.xml Source
Screen 1 - view1.jspx
Source
Backing Bean of view1.jspx : View1.java
Screen 2 : ChangePassword.jspx
Source
Backing Bean for ChangePassword.jspx : ChangePassword.java
Other Screen Pages just display the final result
ChallengeQnABean.java loads the questions from the OIM and saves it for the user session page ChangePassword.jspx
OIMOperator.java : it uses the OIM 11g api to perform all oim operations like reads global questions, update user, set QnA etc.
PropertyLoader.java : reads the configuratiosn and UI labels and anything else that should not be hard coded
UpdateDb.java : it tracks the account claim process in its internal schema table like whether the account is already claimed or not and few more tables which can be used by external applications
Properties Files
ViewControllerBundle.properties: Automtically used for UI labels in adf pages
#
ACCOUNT_INFORMATION=Account Information
#UID
UID=UID
#PIN
PIN=PIN
#Zip Code
ZIP_CODE=Zip Code
#Date of Birth
DATE_OF_BIRTH=Date of Birth
#Next
NEXT=Next
#Cancel
CANCEL=Cancel
#Account Claim Validation
ACCOUNT_CLAIM_VALIDATION=Account Claim Validation
myApp.properties: Application Specific properties file
admin=xelsysadm
password=password
oimURL=t3://host:14010/oim
oimLogin=http://host:14010/oim/faces/pages/Self.jspx
GRACE_DAYS=3
# DB Properties
#hostname=hostname
#DBservicename=servicename
#DBSIDname=sidname
#DBport=1521
dbuser=dbuser
dbpassword=dbpassword
table=table
colum=colum
claimcolum=claimcolum-date
url=jdbc:oracle:thin:@hostname:1521:sid
#DateSource
usedatasource=true
datasource=jdbc/iamdatasource
What this application does is facilitate Account Claim Process.
Users has been migrated from some other IAM product to OIM and exist in disabled state and hence cannot login to perform Self Service operations.
User needs to identify themselves by providing their personal details like personal identification number, zip code and dob etc.
After successfully Identifying themselves they will be able to set a new password and set their challenge questions and answers.
During this process the application will activate their account and set the new password and QnA.
At the end of the process, they will be able to login OIM with their new password set.
The application has been developed using JDeveloper using ADF technology to render user interfaces and MVC design pattern to keep the concerns separate.
Application Structure
web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> 3 <context-param> 4 <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 5 <param-value>client</param-value> 6 </context-param> 7 <context-param> 8 <description>If this parameter is true, there will be an automatic check of the modification date of your JSPs, and saved state will be discarded when JSP's change. It will also automatically check if your skinning css files have changed without you having to restart the server. This makes development easier, but adds overhead. For this reason this parameter should be set to false when your application is deployed.</description> 9 <param-name>org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION</param-name> 10 <param-value>false</param-value> 11 </context-param> 12 <context-param> 13 <description>Whether the 'Generated by...' comment at the bottom of ADF Faces HTML pages should contain version number information.</description> 14 <param-name>oracle.adf.view.rich.versionString.HIDDEN</param-name> 15 <param-value>false</param-value> 16 </context-param> 17 <filter> 18 <filter-name>trinidad</filter-name> 19 <filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class> 20 </filter> 21 <filter> 22 <filter-name>ServletADFFilter</filter-name> 23 <filter-class>oracle.adf.share.http.ServletADFFilter</filter-class> 24 </filter> 25 <filter> 26 <filter-name>ADFLibraryFilter</filter-name> 27 <filter-class>oracle.adf.library.webapp.LibraryFilter</filter-class> 28 </filter> 29 <filter-mapping> 30 <filter-name>trinidad</filter-name> 31 <servlet-name>Faces Servlet</servlet-name> 32 <dispatcher>FORWARD</dispatcher> 33 <dispatcher>REQUEST</dispatcher> 34 </filter-mapping> 35 <filter-mapping> 36 <filter-name>ServletADFFilter</filter-name> 37 <servlet-name>Faces Servlet</servlet-name> 38 <dispatcher>FORWARD</dispatcher> 39 <dispatcher>REQUEST</dispatcher> 40 </filter-mapping> 41 <filter-mapping> 42 <filter-name>ADFLibraryFilter</filter-name> 43 <url-pattern>/*</url-pattern> 44 <dispatcher>FORWARD</dispatcher> 45 <dispatcher>REQUEST</dispatcher> 46 </filter-mapping> 47 <servlet> 48 <servlet-name>Faces Servlet</servlet-name> 49 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 50 <load-on-startup>1</load-on-startup> 51 </servlet> 52 <servlet> 53 <servlet-name>resources</servlet-name> 54 <servlet-class>org.apache.myfaces.trinidad.webapp.ResourceServlet</servlet-class> 55 </servlet> 56 <servlet> 57 <servlet-name>BIGRAPHSERVLET</servlet-name> 58 <servlet-class>oracle.adfinternal.view.faces.bi.renderkit.graph.GraphServlet</servlet-class> 59 </servlet> 60 <servlet> 61 <servlet-name>BIGAUGESERVLET</servlet-name> 62 <servlet-class>oracle.adfinternal.view.faces.bi.renderkit.gauge.GaugeServlet</servlet-class> 63 </servlet> 64 <servlet> 65 <servlet-name>MapProxyServlet</servlet-name> 66 <servlet-class>oracle.adfinternal.view.faces.bi.renderkit.geoMap.servlet.MapProxyServlet</servlet-class> 67 </servlet> 68 <servlet> 69 <servlet-name>GatewayServlet</servlet-name> 70 <servlet-class>oracle.adfinternal.view.faces.bi.renderkit.graph.FlashBridgeServlet</servlet-class> 71 </servlet> 72 <servlet> 73 <servlet-name>adflibResources</servlet-name> 74 <servlet-class>oracle.adf.library.webapp.ResourceServlet</servlet-class> 75 </servlet> 76 <servlet-mapping> 77 <servlet-name>Faces Servlet</servlet-name> 78 <url-pattern>/faces/*</url-pattern> 79 </servlet-mapping> 80 <servlet-mapping> 81 <servlet-name>resources</servlet-name> 82 <url-pattern>/adf/*</url-pattern> 83 </servlet-mapping> 84 <servlet-mapping> 85 <servlet-name>resources</servlet-name> 86 <url-pattern>/afr/*</url-pattern> 87 </servlet-mapping> 88 <servlet-mapping> 89 <servlet-name>BIGRAPHSERVLET</servlet-name> 90 <url-pattern>/servlet/GraphServlet/*</url-pattern> 91 </servlet-mapping> 92 <servlet-mapping> 93 <servlet-name>BIGAUGESERVLET</servlet-name> 94 <url-pattern>/servlet/GaugeServlet/*</url-pattern> 95 </servlet-mapping> 96 <servlet-mapping> 97 <servlet-name>MapProxyServlet</servlet-name> 98 <url-pattern>/mapproxy/*</url-pattern> 99 </servlet-mapping> 100 <servlet-mapping> 101 <servlet-name>resources</servlet-name> 102 <url-pattern>/bi/*</url-pattern> 103 </servlet-mapping> 104 <servlet-mapping> 105 <servlet-name>GatewayServlet</servlet-name> 106 <url-pattern>/flashbridge/*</url-pattern> 107 </servlet-mapping> 108 <servlet-mapping> 109 <servlet-name>adflibResources</servlet-name> 110 <url-pattern>/adflib/*</url-pattern> 111 </servlet-mapping> 112 <mime-mapping> 113 <extension>swf</extension> 114 <mime-type>application/x-shockwave-flash</mime-type> 115 </mime-mapping> 116 <welcome-file-list> 117 <welcome-file>/index.jsp</welcome-file> 118 </welcome-file-list> 119 </web-app>
adfc-config.xml
adfc-config.xml Source
1 <?xml version="1.0" encoding="windows-1252" ?> 2 <adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2"> 3 <view id="AccountClaim"> 4 <page>/view1.jspx</page> 5 </view> 6 <view id="view2"> 7 <page>/view2.jspx</page> 8 </view> 9 <view id="view3"> 10 <page>/view3.jspx</page> 11 </view> 12 <view id="view4"> 13 <page>/view4.jspx</page> 14 </view> 15 <view id="view5"> 16 <page>/view5.jspx</page> 17 </view> 18 <view id="ChangePassword"> 19 <page>/ChangePassword.jspx</page> 20 </view> 21 <view id="ClaimSuccess"> 22 <page>/ClaimSuccess.jspx</page> 23 </view> 24 <control-flow-rule id="__5"> 25 <from-activity-id id="__6">AccountClaim</from-activity-id> 26 <control-flow-case id="__15"> 27 <from-outcome id="__20">false</from-outcome> 28 <to-activity-id id="__14">AccountClaim</to-activity-id> 29 </control-flow-case> 30 <control-flow-case id="__22"> 31 <from-outcome id="__23">cancel</from-outcome> 32 <to-activity-id id="__21">view3</to-activity-id> 33 </control-flow-case> 34 <control-flow-case id="__7"> 35 <from-outcome id="__9">true</from-outcome> 36 <to-activity-id id="__8">ChangePassword</to-activity-id> 37 </control-flow-case> 38 </control-flow-rule> 39 <control-flow-rule id="__17"> 40 <from-activity-id id="__16">*</from-activity-id> 41 <control-flow-case id="__19"> 42 <to-activity-id id="__18">AccountClaim</to-activity-id> 43 </control-flow-case> 44 </control-flow-rule> 45 <control-flow-rule id="__53"> 46 <from-activity-id id="__54">ChangePassword</from-activity-id> 47 <control-flow-case id="__55"> 48 <from-outcome id="__57">true</from-outcome> 49 <to-activity-id id="__56">ClaimSuccess</to-activity-id> 50 </control-flow-case> 51 <control-flow-case id="__59"> 52 <from-outcome id="__60">false</from-outcome> 53 <to-activity-id id="__58">view3</to-activity-id> 54 </control-flow-case> 55 <control-flow-case id="__62"> 56 <from-outcome id="__63">NO_USER_FOUND</from-outcome> 57 <to-activity-id id="__61">view4</to-activity-id> 58 </control-flow-case> 59 <control-flow-case id="__64"> 60 <from-outcome id="__66">CLAIMED_EARLIER</from-outcome> 61 <to-activity-id id="__65">view2</to-activity-id> 62 </control-flow-case> 63 <control-flow-case id="__68"> 64 <from-outcome id="__69">MULTIPLE_USER_FOUND</from-outcome> 65 <to-activity-id id="__67">view5</to-activity-id> 66 </control-flow-case> 67 </control-flow-rule> 68 <managed-bean id="__1"> 69 <managed-bean-name id="__2">backing_view1</managed-bean-name> 70 <managed-bean-class id="__4">view.resources.backing.View1</managed-bean-class> 71 <managed-bean-scope id="__3">backingBean</managed-bean-scope> 72 <!--oracle-jdev-comment:managed-bean-jsp-link:1view1.jspx--> 73 </managed-bean> 74 <managed-bean id="__10"> 75 <managed-bean-name id="__12">backing_view2</managed-bean-name> 76 <managed-bean-class id="__11">view.resources.backing.View2</managed-bean-class> 77 <managed-bean-scope id="__13">backingBean</managed-bean-scope> 78 <!--oracle-jdev-comment:managed-bean-jsp-link:1view2.jspx--> 79 </managed-bean> 80 <managed-bean id="__35"> 81 <managed-bean-name id="__37">backing_view4</managed-bean-name> 82 <managed-bean-class id="__34">view.resources.backing.View4</managed-bean-class> 83 <managed-bean-scope id="__36">backingBean</managed-bean-scope> 84 <!--oracle-jdev-comment:managed-bean-jsp-link:1view4.jspx--> 85 </managed-bean> 86 <managed-bean id="__44"> 87 <managed-bean-name id="__41">backing_view5</managed-bean-name> 88 <managed-bean-class id="__43">view.resources.backing.View5</managed-bean-class> 89 <managed-bean-scope id="__42">backingBean</managed-bean-scope> 90 <!--oracle-jdev-comment:managed-bean-jsp-link:1view5.jspx--> 91 </managed-bean> 92 <managed-bean id="__46"> 93 <managed-bean-name id="__47">backing_ChangePassword</managed-bean-name> 94 <managed-bean-class id="__45">view.resources.backing.ChangePassword</managed-bean-class> 95 <managed-bean-scope id="__48">backingBean</managed-bean-scope> 96 <!--oracle-jdev-comment:managed-bean-jsp-link:1ChangePassword.jspx--> 97 </managed-bean> 98 <managed-bean id="__51"> 99 <managed-bean-name id="__50">challengeQnABean</managed-bean-name> 100 <managed-bean-class id="__49">view.resources.backing.ChallengeQnABean</managed-bean-class> 101 <managed-bean-scope id="__52">none</managed-bean-scope> 102 </managed-bean> 103 </adfc-config> 104
Screen 1 - view1.jspx
Source
1 <?xml version='1.0' encoding='windows-1252'?> 2 <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" 3 xmlns:f="http://java.sun.com/jsf/core" 4 xmlns:af="http://xmlns.oracle.com/adf/faces/rich" 5 xmlns:c="http://java.sun.com/jsp/jstl/core"> 6 <c:set var="viewcontrollerBundle" 7 value="#{adfBundle['view.resources.ViewControllerBundle']}"/> 8 <jsp:directive.page contentType="text/html;charset=windows-1252"/> 9 <f:view> 10 <af:document id="d1" binding="#{backingBeanScope.backing_view1.d1}" 11 title="#{viewcontrollerBundle.ACCOUNT_CLAIM_VALIDATION}"> 12 <af:form id="f1" binding="#{backingBeanScope.backing_view1.f1}"> 13 <af:pageTemplate viewId="/oracle/templates/threeColumnTemplate.jspx" 14 id="pt1"> 15 <f:facet name="center"> 16 <af:panelFormLayout binding="#{backingBeanScope.backing_view1.pfl1}" 17 id="pfl1" rows="10"> 18 <af:panelLabelAndMessage label="#{viewcontrollerBundle.ACCOUNT_INFORMATION}" 19 binding="#{backingBeanScope.backing_view1.plam1}" 20 id="plam1"/> 21 <af:inputText label="#{viewcontrollerBundle.UID}" 22 binding="#{backingBeanScope.backing_view1.it1}" 23 id="it1" showRequired="true" required="true" 24 validator="#{backingBeanScope.backing_view1.it1_validator}"/> 25 <af:inputText label="#{viewcontrollerBundle.PIN}" 26 binding="#{backingBeanScope.backing_view1.it2}" 27 id="it2" secret="true" showRequired="true" 28 required="true" 29 validator="#{backingBeanScope.backing_view1.it2_validator}"/> 30 <af:inputText 31 binding="#{backingBeanScope.backing_view1.it3}" 32 id="it3" showRequired="true" required="true" 33 validator="#{backingBeanScope.backing_view1.it3_validator}" 34 label="#{viewcontrollerBundle.ZIP_CODE}"/> 35 <af:inputDate 36 binding="#{backingBeanScope.backing_view1.id2}" 37 id="id2" showRequired="true" required="true" 38 label="#{viewcontrollerBundle.DATE_OF_BIRTH}" 39 validator="#{backingBeanScope.backing_view1.id2_validator2}"/> 40 41 <af:panelGroupLayout binding="#{backingBeanScope.backing_view1.pgl1}" 42 id="pgl1"> 43 <af:commandButton text="#{viewcontrollerBundle.NEXT}" 44 binding="#{backingBeanScope.backing_view1.cb1}" 45 id="cb1" 46 action="#{backingBeanScope.backing_view1.cb1_action}"/> 47 <af:commandButton text="#{viewcontrollerBundle.CANCEL}" 48 binding="#{backingBeanScope.backing_view1.cb2}" 49 id="cb2" action="cancel"/> 50 </af:panelGroupLayout> 51 </af:panelFormLayout> 52 </f:facet> 53 <f:facet name="header"/> 54 <f:facet name="end"/> 55 <f:facet name="start"/> 56 <f:facet name="branding"/> 57 <f:facet name="copyright"/> 58 <f:facet name="status"/> 59 </af:pageTemplate> 60 </af:form> 61 </af:document> 62 </f:view> 63 <!--oracle-jdev-comment:auto-binding-backing-bean-name:backing_view1--> 64 </jsp:root> 65
Backing Bean of view1.jspx : View1.java
1 package view.resources.backing; 2 3 import java.text.SimpleDateFormat; 4 5 import javax.faces.application.FacesMessage; 6 7 import java.util.Date; 8 import java.util.List; 9 import java.util.Map; 10 import java.util.ResourceBundle; 11 12 import java.util.regex.Matcher; 13 import java.util.regex.Pattern; 14 15 import javax.faces.component.UIComponent; 16 import javax.faces.context.FacesContext; 17 18 import javax.faces.validator.ValidatorException; 19 20 import oracle.adf.share.ADFContext; 21 import oracle.adf.view.rich.component.rich.RichDocument; 22 import oracle.adf.view.rich.component.rich.RichForm; 23 import oracle.adf.view.rich.component.rich.input.RichInputDate; 24 import oracle.adf.view.rich.component.rich.input.RichInputText; 25 import oracle.adf.view.rich.component.rich.layout.RichPanelFormLayout; 26 import oracle.adf.view.rich.component.rich.layout.RichPanelGroupLayout; 27 import oracle.adf.view.rich.component.rich.layout.RichPanelHeader; 28 import oracle.adf.view.rich.component.rich.layout.RichPanelLabelAndMessage; 29 import oracle.adf.view.rich.component.rich.nav.RichCommandButton; 30 31 import oracle.iam.identity.exception.NoSuchUserException; 32 import oracle.iam.identity.exception.UserLookupException; 33 import oracle.iam.identity.exception.UserModifyException; 34 import oracle.iam.identity.exception.UserSearchException; 35 import oracle.iam.identity.exception.ValidationFailedException; 36 import oracle.iam.identity.usermgmt.api.UserManager; 37 import oracle.iam.identity.usermgmt.vo.User; 38 import oracle.iam.identity.usermgmt.vo.UserManagerResult; 39 import oracle.iam.platform.OIMClient; 40 import oracle.iam.platform.Role; 41 42 import oracle.iam.platform.authz.exception.AccessDeniedException; 43 44 import oracle.iam.platform.entitymgr.vo.SearchCriteria; 45 46 import org.apache.myfaces.trinidad.component.UIXGroup; 47 48 import static view.resources.backing.PropertyLoader.admin; 49 import static view.resources.backing.PropertyLoader.password; 50 import static view.resources.backing.PropertyLoader.GRACE_DAYS; 51 52 53 54 public class View1 { 55 private RichForm f1; 56 private RichDocument d1; 57 private RichCommandButton cb1; 58 private UIXGroup g1; 59 private RichInputText it1; 60 private RichInputText it2; 61 private RichInputText it3; 62 private RichCommandButton cb2; 63 private String className = this.getClass().getSimpleName(); 64 private RichPanelFormLayout pfl1; 65 private RichPanelGroupLayout pgl1; 66 private RichPanelLabelAndMessage plam1; 67 private RichPanelFormLayout pfl2; 68 private RichPanelGroupLayout pgl2; 69 70 private UIXGroup g2; 71 private RichInputDate id2; 72 private RichPanelHeader ph1; 73 74 75 public void setF1(RichForm f1) { 76 this.f1 = f1; 77 } 78 79 public RichForm getF1() { 80 return f1; 81 } 82 83 public void setD1(RichDocument d1) { 84 this.d1 = d1; 85 } 86 87 public RichDocument getD1() { 88 return d1; 89 } 90 91 public void setCb1(RichCommandButton cb1) { 92 this.cb1 = cb1; 93 } 94 95 public RichCommandButton getCb1() { 96 return cb1; 97 } 98 99 private String getResourceBundleName() { 100 String method = Thread.currentThread().getStackTrace()[1] 101 .getMethodName(); 102 enter(method); 103 String wpf = ""; 104 try { 105 wpf = ResourceBundle.getBundle("view.backing.whichpropfile") 106 .getString("whichpropfile"); 107 System.out.println("wpf ->" + wpf); 108 } catch (Exception e) { 109 e.printStackTrace(); 110 System.out.println("e.getMessage ->" + e.getMessage()); 111 } 112 exit(method); 113 return wpf; 114 } 115 116 private void enter(String method) { 117 System.out.println("Entering " + method + " of class " + className); 118 } 119 120 private void exit(String method) { 121 System.out.println("Exiting " + method + " of class " + className); 122 } 123 124 public String cb1_action() { 125 String response = "false"; 126 String method = Thread.currentThread().getStackTrace()[1] 127 .getMethodName(); 128 enter(method); 129 try { 130 131 String oimUserName = it1.getValue().toString(); 132 System.out.println("oimUserName ->" + oimUserName); 133 setInSession("username", oimUserName); 134 OIMOperator oim = new OIMOperator(admin, password); 135 UserManager usersvc = oim.getUserManager(); 136 User user = usersvc.getDetails(oimUserName, null, true); 137 // make all the checks 138 // boolean otherValuesMatch = otherValuesMatch(user); 139 boolean isUserDisabled = isUserDisabled(user); 140 boolean isPinExpired = isPinExpired(user); 141 if (isUserDisabled && (!isPinExpired)) { 142 oim.logout(); 143 System.out.println("all conditions satisfied"); 144 response = "true"; 145 } 146 } catch (Exception e) { 147 e.printStackTrace(); 148 System.out.println("e.toString() ->" + e.toString()); 149 System.out.println("e.getMessage() ->" + e.getMessage()); 150 } 151 exit(method); 152 return response; 153 } 154 155 private boolean isUserDisabled(User user) { 156 String method = Thread.currentThread().getStackTrace()[1] 157 .getMethodName(); 158 enter(method); 159 boolean isDisabled = false; 160 String isDis = ""; 161 try { 162 isDis = user.getUserDisabled(); 163 System.out.println("isDis ->" + isDis); 164 if (isDis.equalsIgnoreCase("1")) { 165 isDisabled = true; 166 } 167 } catch (Exception e) { 168 169 e.printStackTrace(); 170 } 171 exit(method); 172 return isDisabled; 173 } 174 175 private boolean isEndDateInFuture(User user) { 176 String method = Thread.currentThread().getStackTrace()[1] 177 .getMethodName(); 178 enter(method); 179 boolean isEndInFuture = false; 180 Date endDate; 181 try { 182 endDate = user.getEndDate(); 183 System.out.println("endDate ->" + endDate); 184 Date currentDate = new Date(); 185 System.out.println("currentDate ->" + currentDate); 186 int dateComp = currentDate.compareTo(endDate); 187 if ((dateComp == 0) || (dateComp < 0)) { 188 isEndInFuture = true; 189 } 190 } catch (Exception e) { 191 System.out.println("e.getMessage() ->" + e.getMessage()); 192 e.printStackTrace(); 193 } 194 exit(method); 195 return isEndInFuture; 196 } 197 198 private boolean isPinExpired(User user) { 199 String method = Thread.currentThread().getStackTrace()[1] 200 .getMethodName(); 201 enter(method); 202 boolean isPinExpired = false; 203 Date startDate; 204 try { 205 startDate = (Date) user.getAttribute("PIN Start Date"); 206 System.out.println("startDate ->" + startDate); 207 long startTime = startDate.getTime(); 208 System.out.println("startTime -> " + startTime); 209 long oneday = 24 * 60 * 60 * 1000; 210 long totalGraceTime = Integer.parseInt(GRACE_DAYS) * oneday; 211 System.out.println("totalGraceTime -> " + totalGraceTime); 212 Date currentDate = new Date(); 213 long currentTime = currentDate.getTime(); 214 System.out.println("currentTime -> " + currentTime); 215 if (currentTime - startTime <= totalGraceTime) { 216 System.out.println("Within the Grace Period"); 217 isPinExpired = false; 218 } else { 219 System.out.println("Grace Period Exceeded"); 220 isPinExpired = true; 221 } 222 } catch (Exception e) { 223 System.out.println("e.getMessage() ->" + e.getMessage()); 224 e.printStackTrace(); 225 } 226 exit(method); 227 return isPinExpired; 228 } 229 230 private void setInSession(String attr, String value) { 231 String method = Thread.currentThread().getStackTrace()[1] 232 .getMethodName(); 233 enter(method); 234 try { 235 ADFContext adfCtx = ADFContext.getCurrent(); 236 Map session = adfCtx.getSessionScope(); 237 session.put(attr, value); 238 System.out.println("Added in session -> " + attr); 239 } catch (Exception e) { 240 e.printStackTrace(); 241 } 242 } 243 244 private boolean pinMatch(String uid, String tempPIN) { 245 String method = Thread.currentThread().getStackTrace()[1] 246 .getMethodName(); 247 enter(method); 248 boolean flag = false; 249 250 try { 251 OIMOperator oim = new OIMOperator(admin, password); 252 UserManager usersvc = oim.getUserManager(); 253 User user = usersvc.getDetails(uid, null, true); 254 255 String tPin = ""; 256 tPin = (String) user.getAttribute("Temp PIN"); 257 System.out.println("tPin ->" + tPin); 258 boolean tPinMatches = tPin.equalsIgnoreCase(tempPIN); 259 System.out.println("tPinMatches ->" + tPinMatches); 260 if (tPinMatches) { 261 flag = true; 262 setInSession("pin", tPin); 263 } else { 264 System.out 265 .println("set the logic to set OIM UDF ACP Counter to three or more"); 266 } 267 oim.logout(); 268 } catch (Exception e) { 269 270 e.printStackTrace(); 271 } 272 exit(method); 273 return flag; 274 } 275 276 private boolean zipMatch(String uid, String zip) { 277 String method = Thread.currentThread().getStackTrace()[1] 278 .getMethodName(); 279 enter(method); 280 boolean flag = false; 281 282 try { 283 OIMOperator oim = new OIMOperator(admin, password); 284 UserManager usersvc = oim.getUserManager(); 285 User user = usersvc.getDetails(uid, null, true); 286 287 String zipCode = ""; 288 zipCode = (String) user.getAttribute("Zip Code"); 289 System.out.println("zipCode ->" + zipCode); 290 boolean zipMatches = zip.equalsIgnoreCase(zip); 291 System.out.println("zipMatches ->" + zipMatches); 292 if (zipMatches) { 293 flag = true; 294 setInSession("zip", zipCode); 295 } 296 oim.logout(); 297 } catch (Exception e) { 298 e.printStackTrace(); 299 } 300 exit(method); 301 return flag; 302 } 303 304 private boolean dobMatch(String uid, Date dob) { 305 String method = Thread.currentThread().getStackTrace()[1] 306 .getMethodName(); 307 enter(method); 308 boolean flag = false; 309 310 try { 311 OIMOperator oim = new OIMOperator(admin, password); 312 UserManager usersvc = oim.getUserManager(); 313 User user = usersvc.getDetails(uid, null, true); 314 315 Date dobOIM = null; 316 dobOIM = (Date) user.getAttribute("Date of Birth"); 317 System.out.println("dobOIM ->" + dobOIM); 318 boolean dobMatches = dob.equals(dobOIM); 319 System.out.println("dobMatches ->" + dobMatches); 320 if (dobMatches) { 321 flag = true; 322 } 323 oim.logout(); 324 } catch (Exception e) { 325 326 e.printStackTrace(); 327 } 328 exit(method); 329 return flag; 330 } 331 332 private boolean otherValuesMatch(User user) { 333 String method = Thread.currentThread().getStackTrace()[1] 334 .getMethodName(); 335 enter(method); 336 boolean flag = false; 337 338 try { 339 340 String zip = it3.getValue().toString(); 341 System.out.println("zip ->" + zip); 342 Date dob = (Date) id2.getValue(); 343 System.out.println("dob -> " + dob); 344 345 String z = ""; 346 z = (String) user.getAttribute("Zip Code"); 347 System.out.println("z ->" + z); 348 349 Date d = null; 350 d = (Date) user.getAttribute("Date of Birth"); 351 System.out.println("d ->" + d); 352 353 boolean zipMatches = zip.equalsIgnoreCase(z); 354 System.out.println("zipMatches ->" + zipMatches); 355 boolean dobMatches = dob.equals(d); 356 System.out.println("dobMatches ->" + dobMatches); 357 358 if (zipMatches && dobMatches) { 359 flag = true; 360 361 setInSession("zip", z); 362 // setInSession("dob", d); 363 364 } 365 } catch (Exception e) { 366 367 e.printStackTrace(); 368 } 369 exit(method); 370 return flag; 371 } 372 373 public void setG1(UIXGroup g1) { 374 this.g1 = g1; 375 } 376 377 public UIXGroup getG1() { 378 return g1; 379 } 380 381 public void setIt1(RichInputText it1) { 382 this.it1 = it1; 383 } 384 385 public RichInputText getIt1() { 386 return it1; 387 } 388 389 public void setIt2(RichInputText it2) { 390 this.it2 = it2; 391 } 392 393 public RichInputText getIt2() { 394 return it2; 395 } 396 397 public void setIt3(RichInputText it3) { 398 this.it3 = it3; 399 } 400 401 public RichInputText getIt3() { 402 return it3; 403 } 404 405 public void setCb2(RichCommandButton cb2) { 406 this.cb2 = cb2; 407 } 408 409 public RichCommandButton getCb2() { 410 return cb2; 411 } 412 413 public void setPfl1(RichPanelFormLayout pfl1) { 414 this.pfl1 = pfl1; 415 } 416 417 public RichPanelFormLayout getPfl1() { 418 return pfl1; 419 } 420 421 public void setPgl1(RichPanelGroupLayout pgl1) { 422 this.pgl1 = pgl1; 423 } 424 425 public RichPanelGroupLayout getPgl1() { 426 return pgl1; 427 } 428 429 public void setPlam1(RichPanelLabelAndMessage plam1) { 430 this.plam1 = plam1; 431 } 432 433 public RichPanelLabelAndMessage getPlam1() { 434 return plam1; 435 } 436 437 public void setPfl2(RichPanelFormLayout pfl2) { 438 this.pfl2 = pfl2; 439 } 440 441 public RichPanelFormLayout getPfl2() { 442 return pfl2; 443 } 444 445 public void setPgl2(RichPanelGroupLayout pgl2) { 446 this.pgl2 = pgl2; 447 } 448 449 public RichPanelGroupLayout getPgl2() { 450 return pgl2; 451 } 452 453 public void setG2(UIXGroup g2) { 454 this.g2 = g2; 455 } 456 457 public UIXGroup getG2() { 458 return g2; 459 } 460 461 public void it3_validator(FacesContext facesContext, 462 UIComponent uIComponent, Object object) { 463 464 FacesContext fc = FacesContext.getCurrentInstance(); 465 String zipCode = (String) object; 466 System.out.println("zipCode -> " + zipCode); 467 468 if (!isNumeric(zipCode)) { 469 throw new ValidatorException(new FacesMessage( 470 FacesMessage.SEVERITY_ERROR, 471 "Zip Code should be all numeric", null)); 472 } 473 474 if (!zipMatch((String) getIt1().getValue(), zipCode)) { 475 throw new ValidatorException(new FacesMessage( 476 FacesMessage.SEVERITY_ERROR, "Zip Code is not correct", 477 null)); 478 } 479 480 } 481 482 private boolean isNumeric(String str) { 483 String method = Thread.currentThread().getStackTrace()[1] 484 .getMethodName(); 485 enter(method); 486 boolean flag = true; 487 try { 488 489 int d = Integer.parseInt(str); 490 System.out.println("d -> " + d); 491 } catch (NumberFormatException nfe) { 492 nfe.printStackTrace(); 493 flag = false; 494 } 495 exit(method); 496 return flag; 497 } 498 499 public void setId2(RichInputDate id2) { 500 this.id2 = id2; 501 } 502 503 public RichInputDate getId2() { 504 return id2; 505 } 506 507 public void setPh1(RichPanelHeader ph1) { 508 this.ph1 = ph1; 509 } 510 511 public RichPanelHeader getPh1() { 512 return ph1; 513 } 514 515 private boolean checkAlphaNumeric(String s) { 516 Pattern ALPHA = Pattern.compile("[A-Za-z]+"); 517 Pattern NUMERIC = Pattern.compile("[0-9]+"); 518 if (s == null) { 519 return false; 520 } else { 521 Matcher m = ALPHA.matcher(s); 522 Matcher m2 = NUMERIC.matcher(s); 523 return (m.matches() || m2.matches()); 524 } 525 } 526 527 private boolean isUserExist(String userid) { 528 boolean flag = false; 529 String method = Thread.currentThread().getStackTrace()[1] 530 .getMethodName(); 531 enter(method); 532 try { 533 534 } catch (Exception e) { 535 e.printStackTrace(); 536 } 537 exit(method); 538 return flag; 539 } 540 541 public void it1_validator(FacesContext facesContext, 542 UIComponent uIComponent, Object object) { 543 String oimUserName = (String) object; 544 System.out.println("oimUserName -> " + oimUserName); 545 if (checkAlphaNumeric(oimUserName)) { 546 System.out.println("Alphanumeric"); 547 } else { 548 System.out.println("Not alphanumeric"); 549 throw new ValidatorException(new FacesMessage( 550 FacesMessage.SEVERITY_ERROR, "UID should be AlphaNumeric", 551 null)); 552 } 553 OIMOperator oim = new OIMOperator(admin, password); 554 UserManager usersvc = oim.getUserManager(); 555 SearchCriteria criteria = new SearchCriteria("User Login", oimUserName, 556 SearchCriteria.Operator.EQUAL); 557 List<User> result = null; 558 559 try { 560 result = usersvc.search(criteria, null, null); 561 } catch (AccessDeniedException e) { 562 e.printStackTrace(); 563 } catch (UserSearchException e) { 564 e.printStackTrace(); 565 } 566 oim.logout(); 567 if (result.size() == 0) { 568 System.out.println("UID does not exist"); 569 throw new ValidatorException(new FacesMessage( 570 FacesMessage.SEVERITY_ERROR, "UID does not exist", null)); 571 } 572 573 } 574 575 private int pinValidCount = 0; 576 577 private boolean fetchPinValidCount(User user) { 578 String method = Thread.currentThread().getStackTrace()[1] 579 .getMethodName(); 580 enter(method); 581 boolean pinValidCount = true; 582 try { 583 String pinAttempt = ""; 584 pinAttempt = (String) user.getAttribute("PINAttempt"); 585 System.out.println("pinAttempt ->" + pinAttempt); 586 int pinAttemptCount = Integer.parseInt(pinAttempt); 587 588 if (pinAttemptCount >= 3) { 589 System.out.println("pinAttempt limit exceeded"); 590 pinValidCount = false; 591 } 592 } catch (Exception e) { 593 e.printStackTrace(); 594 } 595 exit(method); 596 return pinValidCount; 597 } 598 599 private int getWrongPinAttempt(User user) { 600 String method = Thread.currentThread().getStackTrace()[1] 601 .getMethodName(); 602 enter(method); 603 int pinAttemptCount = 0; 604 try { 605 String pinAttempt = (String) user.getAttribute("PINAttempt"); 606 pinAttemptCount = Integer.parseInt(pinAttempt); 607 System.out.println("pinAttemptCount -> " + pinAttemptCount); 608 if (pinAttemptCount >= 3) { 609 System.out.println(" pinAttemptCount is 3 or more"); 610 // call pinInValidate 611 } else { 612 pinAttemptCount = pinAttemptCount + 1; 613 } 614 } catch (Exception e) { 615 e.printStackTrace(); 616 } 617 exit(method); 618 return pinAttemptCount; 619 } 620 621 public void it2_validator(FacesContext facesContext, 622 UIComponent uIComponent, Object object) { 623 String method = Thread.currentThread().getStackTrace()[1] 624 .getMethodName(); 625 enter(method); 626 627 String pin = (String) object; 628 System.out.println("pin -> " + pin); 629 String uid = (String) getIt1().getValue(); 630 System.out.println("uid ->" + uid); 631 OIMOperator oim = new OIMOperator(admin, password); 632 UserManager usersvc = oim.getUserManager(); 633 User user; 634 try { 635 user = usersvc.getDetails(uid, null, true); 636 } catch (AccessDeniedException e) { 637 e.printStackTrace(); 638 } catch (NoSuchUserException e) { 639 e.printStackTrace(); 640 } catch (UserLookupException e) { 641 e.printStackTrace(); 642 } 643 boolean fetchPinValidCount = fetchPinValidCount(user); 644 System.out.println("fetchPinValidCount -> " + fetchPinValidCount); 645 if (!fetchPinValidCount) { 646 Date pinVAlidityDate = (Date) user.getAttribute("PINVAlidityDate"); 647 648 throw new ValidatorException(new FacesMessage( 649 FacesMessage.SEVERITY_ERROR, 650 "PIN Attempt Limit is Reached", null)); 651 } 652 boolean isPinValid = pinMatch(uid, pin); 653 if (!isPinValid) { 654 System.out.println("PIN is not valid"); 655 int pinAttemptCount = getWrongPinAttempt(user); 656 String pinAttempt = String.valueOf(pinAttemptCount); 657 System.out.println("pinAttempt -> " + pinAttempt); 658 user.setAttribute("PINAttempt", pinAttempt); 659 try { 660 usersvc.modify(user); 661 } catch (ValidationFailedException e) { 662 e.printStackTrace(); 663 } catch (AccessDeniedException e) { 664 e.printStackTrace(); 665 } catch (UserModifyException e) { 666 e.printStackTrace(); 667 } catch (NoSuchUserException e) { 668 e.printStackTrace(); 669 } 670 throw new ValidatorException(new FacesMessage( 671 FacesMessage.SEVERITY_ERROR, "PIN is not valid", null)); 672 } 673 oim.logout(); 674 exit(method); 675 676 } 677 678 public void id2_validator2(FacesContext facesContext, 679 UIComponent uIComponent, Object object) { 680 Date dob = (Date) object; 681 System.out.println("dob -> " + dob); 682 if (!dobMatch((String) getIt1().getValue(), dob)) { 683 throw new ValidatorException(new FacesMessage( 684 FacesMessage.SEVERITY_ERROR, 685 "Date of Birth is not correct", null)); 686 } 687 } 688 } 689
Screen 2 : ChangePassword.jspx
Source
1 <?xml version='1.0' encoding='windows-1252'?> 2 <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" 3 xmlns:f="http://java.sun.com/jsf/core" 4 xmlns:af="http://xmlns.oracle.com/adf/faces/rich" 5 xmlns:c="http://java.sun.com/jsp/jstl/core"> 6 <c:set var="viewcontrollerBundle" 7 value="#{adfBundle['view.resources.ViewControllerBundle']}"/> 8 <jsp:directive.page contentType="text/html;charset=windows-1252"/> 9 <f:view> 10 <af:document id="d1" title="Change Password Page" 11 binding="#{backingBeanScope.backing_ChangePassword.d1}"> 12 <af:form id="f1" binding="#{backingBeanScope.backing_ChangePassword.f1}"> 13 <af:pageTemplate viewId="/oracle/templates/threeColumnTemplate.jspx" 14 id="pt1"> 15 <f:facet name="center"> 16 17 <af:panelFormLayout binding="#{backingBeanScope.backing_ChangePassword.pfl1}" 18 id="pfl1" rows="99" maxColumns="1"> 19 20 <af:panelLabelAndMessage label="Password Information" 21 binding="#{backingBeanScope.backing_ChangePassword.plam1}" 22 id="plam1"/> 23 <af:inputText label="Password " 24 binding="#{backingBeanScope.backing_ChangePassword.it1}" 25 id="it1" showRequired="true" secret="true" 26 required="true"/> 27 <af:inputText label="New Password " 28 binding="#{backingBeanScope.backing_ChangePassword.it2}" 29 id="it2" secret="true" showRequired="true" 30 required="true"/> 31 <af:inputText label="Confirm New Password" 32 binding="#{backingBeanScope.backing_ChangePassword.it3}" 33 id="it3" secret="true" showRequired="true" 34 validator="#{backingBeanScope.backing_ChangePassword.it3_validator}" 35 required="true"/> 36 37 <af:panelLabelAndMessage label="Challenge Question and Answers" 38 binding="#{backingBeanScope.backing_ChangePassword.plam2}" 39 id="plam2"/> 40 41 <af:panelGroupLayout id="pgl1" layout="horizontal"> 42 <af:selectOneChoice label="Question 1 : " 43 binding="#{backingBeanScope.backing_ChangePassword.soc1}" 44 id="soc1" showRequired="true" 45 required="true"> 46 <f:selectItems value="#{challengeQnABean.selectItems}" 47 id="si1"/> 48 </af:selectOneChoice> 49 <af:inputText label="Answer 1 : " 50 binding="#{backingBeanScope.backing_ChangePassword.it5}" 51 id="it5" showRequired="true" required="true"/> 52 </af:panelGroupLayout> 53 <af:panelGroupLayout id="pgl2" layout="horizontal"> 54 <af:selectOneChoice label="Question 2 : " 55 binding="#{backingBeanScope.backing_ChangePassword.soc2}" 56 id="soc2" showRequired="true" 57 required="true"> 58 <f:selectItems value="#{challengeQnABean.selectItems}" 59 id="si2"/> 60 </af:selectOneChoice> 61 <af:inputText label="Answer 2 : " 62 binding="#{backingBeanScope.backing_ChangePassword.it6}" 63 id="it6" showRequired="true" required="true"/> 64 </af:panelGroupLayout> 65 <af:panelGroupLayout id="pgl3" layout="horizontal"> 66 <af:selectOneChoice label="Question 3 : " 67 binding="#{backingBeanScope.backing_ChangePassword.soc3}" 68 id="soc3" showRequired="true" 69 validator="#{backingBeanScope.backing_ChangePassword.soc3_validator}" 70 required="true"> 71 <f:selectItems value="#{challengeQnABean.selectItems}" 72 id="si3"/> 73 </af:selectOneChoice> 74 <af:inputText label="Answer 3 : " 75 binding="#{backingBeanScope.backing_ChangePassword.it7}" 76 id="it7" showRequired="true" 77 validator="#{backingBeanScope.backing_ChangePassword.it7_validator}" 78 required="true"/> 79 </af:panelGroupLayout> 80 81 <af:panelGroupLayout binding="#{backingBeanScope.backing_ChangePassword.pgl4}" 82 id="pgl4"> 83 <af:commandButton text="Submit" 84 binding="#{backingBeanScope.backing_ChangePassword.cb1}" 85 id="cb1" 86 action="#{backingBeanScope.backing_ChangePassword.cb1_action}"/> 87 <af:commandButton text="Cancel" 88 binding="#{backingBeanScope.backing_ChangePassword.cb2}" 89 id="cb2" 90 action="#{backingBeanScope.backing_ChangePassword.cb2_action}"/> 91 </af:panelGroupLayout> 92 93 </af:panelFormLayout> 94 </f:facet> 95 <f:facet name="header"/> 96 <f:facet name="end"/> 97 <f:facet name="start"/> 98 <f:facet name="branding"/> 99 <f:facet name="copyright"/> 100 <f:facet name="status"/> 101 </af:pageTemplate> 102 </af:form> 103 </af:document> 104 </f:view> 105 <!--oracle-jdev-comment:auto-binding-backing-bean-name:backing_ChangePassword--> 106 </jsp:root> 107
Backing Bean for ChangePassword.jspx : ChangePassword.java
1 package view.resources.backing; 2 3 import java.util.Date; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import javax.faces.application.FacesMessage; 9 import javax.faces.component.UIComponent; 10 import javax.faces.component.UISelectItems; 11 import javax.faces.context.ExternalContext; 12 import javax.faces.context.FacesContext; 13 import javax.faces.validator.ValidatorException; 14 15 import javax.servlet.http.HttpServletResponse; 16 17 import javax.servlet.http.HttpSession; 18 19 import model.UpdateDb; 20 21 import oracle.adf.share.ADFContext; 22 import oracle.adf.view.rich.component.rich.RichDocument; 23 import oracle.adf.view.rich.component.rich.RichForm; 24 import oracle.adf.view.rich.component.rich.input.RichInputListOfValues; 25 import oracle.adf.view.rich.component.rich.input.RichInputText; 26 import oracle.adf.view.rich.component.rich.input.RichSelectItem; 27 import oracle.adf.view.rich.component.rich.input.RichSelectOneChoice; 28 import oracle.adf.view.rich.component.rich.layout.RichPanelFormLayout; 29 import oracle.adf.view.rich.component.rich.layout.RichPanelGroupLayout; 30 import oracle.adf.view.rich.component.rich.layout.RichPanelHeader; 31 import oracle.adf.view.rich.component.rich.layout.RichPanelLabelAndMessage; 32 import oracle.adf.view.rich.component.rich.nav.RichCommandButton; 33 import oracle.adf.view.rich.component.rich.output.RichOutputLabel; 34 import oracle.adf.view.rich.component.rich.output.RichSeparator; 35 36 import oracle.iam.identity.usermgmt.api.UserManager; 37 import oracle.iam.identity.usermgmt.vo.User; 38 import oracle.iam.identity.usermgmt.vo.UserManagerResult; 39 40 import org.apache.myfaces.trinidad.component.UIXGroup; 41 42 import static view.resources.backing.PropertyLoader.admin; 43 import static view.resources.backing.PropertyLoader.password; 44 import static view.resources.backing.PropertyLoader.oimLogin; 45 46 public class ChangePassword { 47 private RichForm f1; 48 private RichDocument d1; 49 private RichInputText it1; 50 private UIXGroup g1; 51 private RichInputText it2; 52 private RichInputText it3; 53 private RichSeparator s1; 54 private RichOutputLabel ol1; 55 private RichInputListOfValues ilov1; 56 private RichSelectOneChoice soc1; 57 private RichSelectItem si1; 58 private List challengeQnA; 59 private RichSelectOneChoice soc2; 60 private UISelectItems si2; 61 private RichSelectOneChoice soc3; 62 private UISelectItems si3; 63 private RichCommandButton cb1; 64 private RichCommandButton cb2; 65 private RichInputText it5; 66 private RichInputText it6; 67 private RichInputText it7; 68 private String className = this.getClass().getSimpleName(); 69 private RichPanelFormLayout pfl1; 70 private RichPanelLabelAndMessage plam1; 71 private RichPanelFormLayout pfl2; 72 private UIXGroup g2; 73 74 private RichPanelLabelAndMessage plam2; 75 private UIXGroup g3; 76 77 private RichPanelGroupLayout pgl4; 78 // private UIXGroup g1; 79 private RichPanelHeader ph1; 80 private RichPanelLabelAndMessage plam3; 81 private RichInputText it4; 82 private RichInputText it8; 83 private RichInputText it9; 84 private UIXGroup g4; 85 private RichPanelLabelAndMessage plam4; 86 private RichPanelGroupLayout pgl1; 87 private RichSelectOneChoice soc4; 88 private UISelectItems si4; 89 private RichInputText it10; 90 private RichPanelGroupLayout pgl2; 91 private RichSelectOneChoice soc5; 92 private UISelectItems si5; 93 private RichInputText it11; 94 private RichPanelGroupLayout pgl3; 95 private RichSelectOneChoice soc6; 96 private UISelectItems si6; 97 private RichInputText it12; 98 private UIXGroup g5; 99 private RichPanelGroupLayout pgl5; 100 private RichCommandButton cb3; 101 private RichCommandButton cb4; 102 private RichPanelHeader ph2; 103 // private RichPanelFormLayout pfl2; 104 private RichPanelFormLayout pfl3; 105 106 // private RichGoImageLink gil1; 107 108 public void setF1(RichForm f1) { 109 this.f1 = f1; 110 } 111 112 public RichForm getF1() { 113 return f1; 114 } 115 116 public void setD1(RichDocument d1) { 117 this.d1 = d1; 118 } 119 120 public RichDocument getD1() { 121 return d1; 122 } 123 124 public void setIt1(RichInputText it1) { 125 this.it1 = it1; 126 } 127 128 public RichInputText getIt1() { 129 return it1; 130 } 131 132 public void setG1(UIXGroup g1) { 133 this.g1 = g1; 134 } 135 136 public UIXGroup getG1() { 137 return g1; 138 } 139 140 public void setIt2(RichInputText it2) { 141 this.it2 = it2; 142 } 143 144 public RichInputText getIt2() { 145 return it2; 146 } 147 148 public void setIt3(RichInputText it3) { 149 this.it3 = it3; 150 } 151 152 public RichInputText getIt3() { 153 return it3; 154 } 155 156 public void setS1(RichSeparator s1) { 157 this.s1 = s1; 158 } 159 160 public RichSeparator getS1() { 161 return s1; 162 } 163 164 public void setOl1(RichOutputLabel ol1) { 165 this.ol1 = ol1; 166 } 167 168 public RichOutputLabel getOl1() { 169 return ol1; 170 } 171 172 public void setIlov1(RichInputListOfValues ilov1) { 173 this.ilov1 = ilov1; 174 } 175 176 public RichInputListOfValues getIlov1() { 177 return ilov1; 178 } 179 180 public void setSoc1(RichSelectOneChoice soc1) { 181 this.soc1 = soc1; 182 } 183 184 public RichSelectOneChoice getSoc1() { 185 return soc1; 186 } 187 188 public void setSi1(RichSelectItem si1) { 189 this.si1 = si1; 190 } 191 192 public RichSelectItem getSi1() { 193 return si1; 194 } 195 196 public void setChallengeQnA(List challengeQnA) { 197 this.challengeQnA = challengeQnA; 198 } 199 200 public List getChallengeQnA() { 201 OIMOperator oim = new OIMOperator(admin, password); 202 return oim.getChallengeAnswersAsList(); 203 // return challengeQnA; 204 } 205 206 public void setSoc2(RichSelectOneChoice soc2) { 207 this.soc2 = soc2; 208 } 209 210 public RichSelectOneChoice getSoc2() { 211 return soc2; 212 } 213 214 public void setSi2(UISelectItems si2) { 215 this.si2 = si2; 216 } 217 218 public UISelectItems getSi2() { 219 return si2; 220 } 221 222 public void setSoc3(RichSelectOneChoice soc3) { 223 this.soc3 = soc3; 224 } 225 226 public RichSelectOneChoice getSoc3() { 227 return soc3; 228 } 229 230 public void setSi3(UISelectItems si3) { 231 this.si3 = si3; 232 } 233 234 public UISelectItems getSi3() { 235 return si3; 236 } 237 238 public void setCb1(RichCommandButton cb1) { 239 this.cb1 = cb1; 240 } 241 242 public RichCommandButton getCb1() { 243 return cb1; 244 } 245 246 public void setCb2(RichCommandButton cb2) { 247 this.cb2 = cb2; 248 } 249 250 public RichCommandButton getCb2() { 251 return cb2; 252 } 253 254 private void enter(String method) { 255 System.out.println("Entering " + method + " of class " + className); 256 } 257 258 private void exit(String method) { 259 System.out.println("Exiting " + method + " of class " + className); 260 } 261 262 private String getFromSession(String attr) { 263 String method = Thread.currentThread().getStackTrace()[1] 264 .getMethodName(); 265 enter(method); 266 String value = ""; 267 try { 268 ADFContext adfCtx = ADFContext.getCurrent(); 269 Map session = adfCtx.getSessionScope(); 270 value = (String) session.get(attr); 271 System.out.println("retrived from session -> " + value); 272 } catch (Exception e) { 273 e.printStackTrace(); 274 } 275 exit(method); 276 return value; 277 } 278 279 public String cb1_action() { 280 String response = "false"; 281 String method = Thread.currentThread().getStackTrace()[1] 282 .getMethodName(); 283 enter(method); 284 try { 285 String oimUserName = getFromSession("username"); 286 System.out.println("oimUserName ->" + oimUserName); 287 String mail = getFromSession("email"); 288 System.out.println("mail ->" + mail); 289 String oldPassword = it1.getValue().toString(); 290 System.out.println("oldPassword ->" + oldPassword); 291 String newPassword = it2.getValue().toString(); 292 System.out.println("newPassword ->" + newPassword); 293 294 // Update the user in DB first and then proceed 295 UpdateDb updateDB = new UpdateDb(); 296 297 String dbResult = updateDB.updateClaimTable(oimUserName, mail); 298 System.out.println("dbResult -> " + dbResult); 299 300 if (dbResult.equalsIgnoreCase("CLAIMED")) { 301 String q1 = soc1.getValue().toString(); 302 System.out.println("q1 ->" + q1); 303 String q2 = soc2.getValue().toString(); 304 System.out.println("q2 ->" + q2); 305 String q3 = soc3.getValue().toString(); 306 System.out.println("q3 ->" + q3); 307 308 Object a1 = it5.getValue(); 309 System.out.println("a1 ->" + a1); 310 Object a2 = it6.getValue(); 311 System.out.println("a2 ->" + a2); 312 Object a3 = it7.getValue(); 313 System.out.println("a3 ->" + a3); 314 System.out 315 .println("enable the user first so that he can login"); 316 boolean isEnabledNow = enableUser(oimUserName); // Enable the 317 // user first 318 System.out.println(" isEnabledNow-> Modifed the flow -> " 319 + isEnabledNow); 320 321 OIMOperator useroim = new OIMOperator(oimUserName, oldPassword); 322 Map<String, Object> quesAnsMap = new HashMap<String, Object>(); 323 quesAnsMap.put(q1, a1); 324 quesAnsMap.put(q2, a2); 325 quesAnsMap.put(q3, a3); 326 327 if (isEnabledNow) { 328 boolean chgPass, chgQnA = false; 329 chgPass = useroim.changePassword(oldPassword, newPassword, 330 newPassword); 331 System.out.println("chgPass -> " + chgPass); 332 if (chgPass) { 333 chgQnA = useroim.setChallengeValues(quesAnsMap); 334 System.out.println("chgQnA -> " + chgQnA); 335 boolean isErrorInOIM = useroim.isError(); 336 System.out.println(" isErrorInOIM -> " + isErrorInOIM); 337 } 338 if (chgPass && chgQnA) { 339 System.out 340 .println(" Both Password Changed as well as Challenge QnA set-> "); 341 response = "true"; 342 } 343 } 344 boolean isUserOimError = useroim.isError(); 345 if (isUserOimError) { 346 disableUser(oimUserName); 347 } 348 useroim.logout(); 349 350 FacesContext ctx = FacesContext.getCurrentInstance(); 351 System.out.println("ctx ->" + ctx); 352 ExternalContext ectx = ctx.getExternalContext(); 353 System.out.println("ectx ->" + ectx); 354 355 HttpServletResponse hresponse; 356 hresponse = (HttpServletResponse) ectx.getResponse(); 357 HttpSession session = (HttpSession) ectx.getSession(false); 358 session.invalidate(); 359 hresponse.sendRedirect(oimLogin); 360 ctx.responseComplete(); 361 System.out.println("Exiting cb1_action () Aug 08->"); 362 } else { 363 response = dbResult; 364 } 365 System.out.println("Exiting cb1_action () Aug 08->"); 366 367 } catch (Exception e) { 368 e.printStackTrace(); 369 } 370 exit(method); 371 return response; 372 } 373 374 private boolean setEndDate(String oimUserName) { 375 String method = Thread.currentThread().getStackTrace()[1] 376 .getMethodName(); 377 enter(method); 378 boolean isEndSet = false; 379 380 try { 381 OIMOperator systemoim = new OIMOperator(admin, password); 382 UserManager usersvc = systemoim.getUserManager(); 383 User user = usersvc.getDetails(oimUserName, null, true); 384 user.setEndDate(null); 385 UserManagerResult umr = usersvc.modify(user); 386 String status = umr.getStatus(); 387 if (status.equalsIgnoreCase("COMPLETED")) { 388 System.out.println("endDate set successfully"); 389 isEndSet = true; 390 } else { 391 System.out.println("endDate not set -> "); 392 } 393 394 systemoim.logout(); 395 } catch (Exception e) { 396 System.out.println("e.getMessage() ->" + e.getMessage()); 397 e.printStackTrace(); 398 } 399 exit(method); 400 return isEndSet; 401 } 402 403 private boolean disableUser(String uid) { 404 String method = Thread.currentThread().getStackTrace()[1] 405 .getMethodName(); 406 enter(method); 407 boolean flag = false; 408 try { 409 OIMOperator oim = new OIMOperator(admin, password); 410 UserManagerResult umr = null; 411 UserManager usersvc = oim.getUserManager(); 412 User user = usersvc.getDetails(uid, null, true); 413 if (user.getUserDisabled().equalsIgnoreCase("0")) { 414 umr = usersvc.disable(uid, true); 415 } 416 String status = ""; 417 if (umr != null) 418 status = umr.getStatus(); 419 System.out.println("status ->" + status); 420 if (status.equalsIgnoreCase("COMPLETED")) { 421 flag = true; 422 } 423 oim.logout(); 424 } catch (Exception e) { 425 e.printStackTrace(); 426 System.out.println("e.toString() ->" + e.toString()); 427 System.out.println("e.getMessage() ->" + e.getMessage()); 428 } 429 exit(method); 430 return flag; 431 } 432 433 private boolean enableUser(String uid) { 434 String method = Thread.currentThread().getStackTrace()[1] 435 .getMethodName(); 436 enter(method); 437 boolean flag = false; 438 try { 439 OIMOperator oim = new OIMOperator(admin, password); 440 UserManagerResult umr = null; 441 UserManager usersvc = oim.getUserManager(); 442 User user = usersvc.getDetails(uid, null, true); 443 if (user.getUserDisabled().equalsIgnoreCase("1")) { 444 umr = usersvc.enable(uid, true); 445 } 446 String status = ""; 447 if (umr != null) 448 status = umr.getStatus(); 449 System.out.println("status ->" + status); 450 if (status.equalsIgnoreCase("COMPLETED")) { 451 flag = true; 452 } 453 oim.logout(); 454 } catch (Exception e) { 455 e.printStackTrace(); 456 System.out.println("e.toString() ->" + e.toString()); 457 System.out.println("e.getMessage() ->" + e.getMessage()); 458 } 459 exit(method); 460 return flag; 461 } 462 463 public String cb2_action() { 464 // Add event code here... 465 return null; 466 } 467 468 public void setIt5(RichInputText it5) { 469 this.it5 = it5; 470 } 471 472 public RichInputText getIt5() { 473 return it5; 474 } 475 476 public void setIt6(RichInputText it6) { 477 this.it6 = it6; 478 } 479 480 public RichInputText getIt6() { 481 return it6; 482 } 483 484 public void setIt7(RichInputText it7) { 485 this.it7 = it7; 486 } 487 488 public RichInputText getIt7() { 489 return it7; 490 } 491 492 public void it3_validator(FacesContext facesContext, 493 UIComponent uIComponent, Object object) { 494 495 String rit3 = (String) object; 496 System.out.println("rit3 ->" + rit3); 497 RichInputText rit2 = getIt2(); 498 String rit2_s = (String) rit2.getValue(); 499 System.out.println(" rit2_s ->" + rit2_s); 500 if (!(rit3.equalsIgnoreCase(rit2_s))) { 501 throw new ValidatorException( 502 new FacesMessage( 503 FacesMessage.SEVERITY_ERROR, 504 "New Password and Confirm New Password do not match.", 505 null)); 506 } 507 } 508 509 public void it7_validator(FacesContext facesContext, 510 UIComponent uIComponent, Object object) { 511 String rit7 = (String) object; 512 System.out.println("rit7 ->" + rit7); 513 514 RichInputText rit5 = getIt5(); 515 String rit5_s = (String) rit5.getValue(); 516 System.out.println(" rit5_s ->" + rit5_s); 517 518 RichInputText rit6 = getIt6(); 519 String rit6_s = (String) rit6.getValue(); 520 System.out.println(" rit6_s ->" + rit6_s); 521 522 boolean a = rit7.equalsIgnoreCase(rit5_s); 523 boolean b = rit7.equalsIgnoreCase(rit6_s); 524 boolean c = rit5_s.equalsIgnoreCase(rit6_s); 525 if (a || b || c) { 526 throw new ValidatorException(new FacesMessage( 527 FacesMessage.SEVERITY_ERROR, 528 "All Answers should be uniquely set.", null)); 529 } 530 } 531 532 public void setPfl1(RichPanelFormLayout pfl1) { 533 this.pfl1 = pfl1; 534 } 535 536 public RichPanelFormLayout getPfl1() { 537 return pfl1; 538 } 539 540 public void setPlam1(RichPanelLabelAndMessage plam1) { 541 this.plam1 = plam1; 542 } 543 544 public RichPanelLabelAndMessage getPlam1() { 545 return plam1; 546 } 547 548 public void setPfl2(RichPanelFormLayout pfl2) { 549 this.pfl2 = pfl2; 550 } 551 552 public RichPanelFormLayout getPfl2() { 553 return pfl2; 554 } 555 556 public void setG2(UIXGroup g2) { 557 this.g2 = g2; 558 } 559 560 public UIXGroup getG2() { 561 return g2; 562 } 563 564 public void setPlam2(RichPanelLabelAndMessage plam2) { 565 this.plam2 = plam2; 566 } 567 568 public RichPanelLabelAndMessage getPlam2() { 569 return plam2; 570 } 571 572 public void setG3(UIXGroup g3) { 573 this.g3 = g3; 574 } 575 576 public UIXGroup getG3() { 577 return g3; 578 } 579 580 public void setPgl4(RichPanelGroupLayout pgl4) { 581 this.pgl4 = pgl4; 582 } 583 584 public RichPanelGroupLayout getPgl4() { 585 return pgl4; 586 } 587 588 public void soc3_validator(FacesContext facesContext, 589 UIComponent uIComponent, Object object) { 590 591 String soc3 = (String) object; 592 System.out.println(" soc3 -> " + soc3); 593 594 RichSelectOneChoice soc1 = getSoc1(); 595 String soc1_s = (String) soc1.getValue(); 596 System.out.println(" soc1_s ->" + soc1_s); 597 598 RichSelectOneChoice soc2 = getSoc2(); 599 String soc2_s = (String) soc2.getValue(); 600 System.out.println(" soc2_s ->" + soc2_s); 601 602 boolean a = soc3.equalsIgnoreCase(soc1_s); 603 boolean b = soc3.equalsIgnoreCase(soc2_s); 604 boolean c = soc1_s.equalsIgnoreCase(soc2_s); 605 if (a || b || c) { 606 throw new ValidatorException(new FacesMessage( 607 FacesMessage.SEVERITY_ERROR, 608 "All Questions should be uniquely set.", null)); 609 } 610 611 } 612 613 public void setPh1(RichPanelHeader ph1) { 614 this.ph1 = ph1; 615 } 616 617 public RichPanelHeader getPh1() { 618 return ph1; 619 } 620 621 public void setPlam3(RichPanelLabelAndMessage plam3) { 622 this.plam3 = plam3; 623 } 624 625 public RichPanelLabelAndMessage getPlam3() { 626 return plam3; 627 } 628 629 public void setIt4(RichInputText it4) { 630 this.it4 = it4; 631 } 632 633 public RichInputText getIt4() { 634 return it4; 635 } 636 637 public void setIt8(RichInputText it8) { 638 this.it8 = it8; 639 } 640 641 public RichInputText getIt8() { 642 return it8; 643 } 644 645 public void setIt9(RichInputText it9) { 646 this.it9 = it9; 647 } 648 649 public RichInputText getIt9() { 650 return it9; 651 } 652 653 public void setG4(UIXGroup g4) { 654 this.g4 = g4; 655 } 656 657 public UIXGroup getG4() { 658 return g4; 659 } 660 661 public void setPlam4(RichPanelLabelAndMessage plam4) { 662 this.plam4 = plam4; 663 } 664 665 public RichPanelLabelAndMessage getPlam4() { 666 return plam4; 667 } 668 669 public void setPgl1(RichPanelGroupLayout pgl1) { 670 this.pgl1 = pgl1; 671 } 672 673 public RichPanelGroupLayout getPgl1() { 674 return pgl1; 675 } 676 677 public void setSoc4(RichSelectOneChoice soc4) { 678 this.soc4 = soc4; 679 } 680 681 public RichSelectOneChoice getSoc4() { 682 return soc4; 683 } 684 685 public void setSi4(UISelectItems si4) { 686 this.si4 = si4; 687 } 688 689 public UISelectItems getSi4() { 690 return si4; 691 } 692 693 public void setIt10(RichInputText it10) { 694 this.it10 = it10; 695 } 696 697 public RichInputText getIt10() { 698 return it10; 699 } 700 701 public void setPgl2(RichPanelGroupLayout pgl2) { 702 this.pgl2 = pgl2; 703 } 704 705 public RichPanelGroupLayout getPgl2() { 706 return pgl2; 707 } 708 709 public void setSoc5(RichSelectOneChoice soc5) { 710 this.soc5 = soc5; 711 } 712 713 public RichSelectOneChoice getSoc5() { 714 return soc5; 715 } 716 717 public void setSi5(UISelectItems si5) { 718 this.si5 = si5; 719 } 720 721 public UISelectItems getSi5() { 722 return si5; 723 } 724 725 public void setIt11(RichInputText it11) { 726 this.it11 = it11; 727 } 728 729 public RichInputText getIt11() { 730 return it11; 731 } 732 733 public void setPgl3(RichPanelGroupLayout pgl3) { 734 this.pgl3 = pgl3; 735 } 736 737 public RichPanelGroupLayout getPgl3() { 738 return pgl3; 739 } 740 741 public void setSoc6(RichSelectOneChoice soc6) { 742 this.soc6 = soc6; 743 } 744 745 public RichSelectOneChoice getSoc6() { 746 return soc6; 747 } 748 749 public void setSi6(UISelectItems si6) { 750 this.si6 = si6; 751 } 752 753 public UISelectItems getSi6() { 754 return si6; 755 } 756 757 public void setIt12(RichInputText it12) { 758 this.it12 = it12; 759 } 760 761 public RichInputText getIt12() { 762 return it12; 763 } 764 765 public void setG5(UIXGroup g5) { 766 this.g5 = g5; 767 } 768 769 public UIXGroup getG5() { 770 return g5; 771 } 772 773 public void setPgl5(RichPanelGroupLayout pgl5) { 774 this.pgl5 = pgl5; 775 } 776 777 public RichPanelGroupLayout getPgl5() { 778 return pgl5; 779 } 780 781 public void setCb3(RichCommandButton cb3) { 782 this.cb3 = cb3; 783 } 784 785 public RichCommandButton getCb3() { 786 return cb3; 787 } 788 789 public void setCb4(RichCommandButton cb4) { 790 this.cb4 = cb4; 791 } 792 793 public RichCommandButton getCb4() { 794 return cb4; 795 } 796 797 public void setPh2(RichPanelHeader ph2) { 798 this.ph2 = ph2; 799 } 800 801 public RichPanelHeader getPh2() { 802 return ph2; 803 } 804 805 public void setPfl3(RichPanelFormLayout pfl3) { 806 this.pfl3 = pfl3; 807 } 808 809 public RichPanelFormLayout getPfl3() { 810 return pfl3; 811 } 812 } 813
Other Screen Pages just display the final result
ChallengeQnABean.java loads the questions from the OIM and saves it for the user session page ChangePassword.jspx
1 package view.resources.backing; 2 3 import javax.faces.model.SelectItem; 4 5 import static view.resources.backing.PropertyLoader.admin; 6 import static view.resources.backing.PropertyLoader.password; 7 8 public class ChallengeQnABean { 9 public ChallengeQnABean() { 10 super(); 11 } 12 13 private SelectItem[] selectItems; 14 15 private String className = this.getClass().getSimpleName(); 16 17 private void enter(String method) { 18 System.out.println("Entering " + method + " of class " + className); 19 } 20 21 private void exit(String method) { 22 System.out.println("Exiting " + method + " of class " + className); 23 } 24 25 private String[] loadQnA() { 26 String method = Thread.currentThread().getStackTrace()[1] 27 .getMethodName(); 28 enter(method); 29 boolean flag = false; 30 String[] cNa = null; 31 try { 32 OIMOperator oim = new OIMOperator(admin, password); 33 cNa = oim.getChallengeQnA(); 34 oim.logout(); 35 } catch (Exception e) { 36 e.printStackTrace(); 37 System.out.println("e.toString() ->" + e.toString()); 38 System.out.println("e.getMessage() ->" + e.getMessage()); 39 } 40 exit(method); 41 return cNa; 42 } 43 44 public SelectItem[] getSelectItems() { 45 String[] cNa = loadQnA(); 46 if (selectItems == null) { 47 selectItems = new SelectItem[cNa.length]; 48 for (int i = 0; i < cNa.length; i++) { 49 selectItems[i] = new SelectItem(cNa[i], cNa[i], null, false); 50 } 51 } 52 53 return selectItems; 54 } 55 56 } 57
OIMOperator.java : it uses the OIM 11g api to perform all oim operations like reads global questions, update user, set QnA etc.
1 package view.resources.backing; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 6 import oracle.iam.platform.OIMClient; 7 8 import java.util.Hashtable; 9 import java.util.List; 10 11 import java.util.Map; 12 13 import javax.security.auth.login.LoginException; 14 15 import oracle.iam.identity.usermgmt.api.UserManager; 16 import oracle.iam.selfservice.self.selfmgmt.api.AuthenticatedSelfService; 17 import oracle.iam.identity.usermgmt.api.UserManager; 18 import oracle.iam.identity.usermgmt.vo.User; 19 import oracle.iam.identity.usermgmt.vo.UserManagerResult; 20 import oracle.iam.platform.OIMClient; 21 import oracle.iam.platform.Role; 22 import oracle.iam.selfservice.exception.AuthSelfServiceException; 23 24 import oracle.iam.selfservice.uself.uselfmgmt.api.UnauthenticatedSelfService; 25 26 import static view.resources.backing.PropertyLoader.oimURL; 27 28 public class OIMOperator { 29 30 private OIMClient client = null; 31 private String className = this.getClass().getSimpleName(); 32 private boolean error = false; 33 34 OIMOperator(String user, String password) { 35 setOIMClient(oimURL); 36 login(user, password); 37 } 38 39 private void enter(String method) { 40 System.out.println("Entering " + method + " of class " + className); 41 } 42 43 private void exit(String method) { 44 System.out.println("Exiting " + method + " of class " + className); 45 } 46 47 AuthenticatedSelfService getAuthenticatedSelfService() { 48 String method = Thread.currentThread().getStackTrace()[1] 49 .getMethodName(); 50 enter(method); 51 AuthenticatedSelfService service = null; 52 try { 53 service = client.getService(AuthenticatedSelfService.class); 54 } catch (Exception e) { 55 e.printStackTrace(); 56 System.out.println("e.toString() ->" + e.toString()); 57 System.out.println("e.getMessage() ->" + e.getMessage()); 58 setError(true); 59 } 60 exit(method); 61 return service; 62 } 63 64 UnauthenticatedSelfService getUnauthenticatedSelfService() { 65 String method = Thread.currentThread().getStackTrace()[1] 66 .getMethodName(); 67 enter(method); 68 UnauthenticatedSelfService service = null; 69 try { 70 service = client.getService(UnauthenticatedSelfService.class); 71 } catch (Exception e) { 72 73 e.printStackTrace(); 74 System.out.println("e.toString() ->" + e.toString()); 75 System.out.println("e.getMessage() ->" + e.getMessage()); 76 setError(true); 77 } 78 exit(method); 79 return service; 80 } 81 82 UserManager getUserManager() { 83 String method = Thread.currentThread().getStackTrace()[1] 84 .getMethodName(); 85 enter(method); 86 UserManager service = null; 87 try { 88 service = client.getService(UserManager.class); 89 } catch (Exception e) { 90 e.printStackTrace(); 91 System.out.println("e.toString() ->" + e.toString()); 92 System.out.println("e.getMessage() ->" + e.getMessage()); 93 setError(true); 94 } 95 exit(method); 96 return service; 97 } 98 99 public List<String> getChallengeAnswersAsList() { 100 return getChallengeQnAasList(); 101 } 102 103 private List<String> getSArrayToList(String[] s_arr) { 104 List<String> list = new ArrayList<String>(Arrays.asList(s_arr)); 105 return list; 106 } 107 108 String[] getChallengeQnA() { 109 110 String method = Thread.currentThread().getStackTrace()[1] 111 .getMethodName(); 112 enter(method); 113 String[] CnA = null; 114 try { 115 AuthenticatedSelfService service = getAuthenticatedSelfService(); 116 CnA = service.getSystemChallengeQuestions(); 117 } catch (Exception e) { 118 e.printStackTrace(); 119 System.out.println("e.toString() ->" + e.toString()); 120 System.out.println("e.getMessage() ->" + e.getMessage()); 121 setError(true); 122 } 123 exit(method); 124 return CnA; 125 } 126 127 private List<String> getChallengeQnAasList() { 128 List<String> CnAList = null; 129 String method = ""; 130 try { 131 method = Thread.currentThread().getStackTrace()[1].getMethodName(); 132 enter(method); 133 AuthenticatedSelfService service = getAuthenticatedSelfService(); 134 String[] CnA; 135 CnA = service.getSystemChallengeQuestions(); 136 CnAList = getSArrayToList(CnA); 137 138 } catch (Exception e) { 139 e.printStackTrace(); 140 System.out.println("e.toString() ->" + e.toString()); 141 System.out.println("e.getMessage() ->" + e.getMessage()); 142 setError(true); 143 } 144 exit(method); 145 return CnAList; 146 } 147 148 private void setOIMClient(String oimURL) { 149 String method = Thread.currentThread().getStackTrace()[1] 150 .getMethodName(); 151 enter(method); 152 try { 153 Hashtable env = new Hashtable(); 154 env.put(OIMClient.JAVA_NAMING_FACTORY_INITIAL, 155 OIMClient.WLS_CONTEXT_FACTORY); 156 env.put(OIMClient.JAVA_NAMING_PROVIDER_URL, oimURL); 157 client = new OIMClient(env); 158 } catch (Exception e) { 159 e.printStackTrace(); 160 System.out.println("e.toString() ->" + e.toString()); 161 System.out.println("e.getMessage() ->" + e.getMessage()); 162 setError(true); 163 } 164 exit(method); 165 166 } 167 168 private void login(String user, String password) { 169 String method = Thread.currentThread().getStackTrace()[1] 170 .getMethodName(); 171 enter(method); 172 try { 173 System.out.println("Before Login"); 174 client.login(user, password.toCharArray()); 175 System.out.println("After Login"); 176 } catch (Exception e) { 177 e.printStackTrace(); 178 System.out.println("e.toString() ->" + e.toString()); 179 System.out.println("e.getMessage() ->" + e.getMessage()); 180 setError(true); 181 } 182 exit(method); 183 } 184 185 void logout() { 186 String method = Thread.currentThread().getStackTrace()[1] 187 .getMethodName(); 188 enter(method); 189 try { 190 if (client != null) 191 client.logout(); 192 } catch (Exception e) { 193 e.printStackTrace(); 194 System.out.println("e.toString() ->" + e.toString()); 195 System.out.println("e.getMessage() ->" + e.getMessage()); 196 } 197 exit(method); 198 } 199 200 boolean resetPassword(String username, Map<String, Object> quesAnsMap, 201 String password) { 202 String method = Thread.currentThread().getStackTrace()[1] 203 .getMethodName(); 204 enter(method); 205 boolean flag = false; 206 try { 207 flag = getUnauthenticatedSelfService().resetPassword(username, 208 quesAnsMap, password.toCharArray()); 209 } catch (Exception e) { 210 e.printStackTrace(); 211 System.out.println("e.toString() ->" + e.toString()); 212 System.out.println("e.getMessage() ->" + e.getMessage()); 213 setError(true); 214 } 215 exit(method); 216 217 return flag; 218 219 } 220 221 boolean setChallengeQnAValues(Map<String, Object> quesAnsMap) { 222 String method = Thread.currentThread().getStackTrace()[1] 223 .getMethodName(); 224 enter(method); 225 boolean flag = false; 226 try { 227 getAuthenticatedSelfService().setChallengeValues(quesAnsMap); 228 flag = true; 229 } catch (Exception e) { 230 e.printStackTrace(); 231 System.out.println("e.toString() ->" + e.toString()); 232 System.out.println("e.getMessage() ->" + e.getMessage()); 233 setError(true); 234 } 235 exit(method); 236 237 return flag; 238 239 } 240 241 boolean changePassword(String oldPwd, String newPwd, String confirmPwd) { 242 String method = Thread.currentThread().getStackTrace()[1] 243 .getMethodName(); 244 enter(method); 245 boolean flag = false; 246 try { 247 getAuthenticatedSelfService().changePassword(oldPwd.toCharArray(), 248 newPwd.toCharArray(), confirmPwd.toCharArray()); 249 flag = true; 250 } catch (Exception e) { 251 e.printStackTrace(); 252 System.out.println("e.toString() ->" + e.toString()); 253 System.out.println("e.getMessage() ->" + e.getMessage()); 254 setError(true); 255 } 256 exit(method); 257 return flag; 258 } 259 260 boolean setChallengeValues(Map<String, Object> quesAnsMap) { 261 String method = Thread.currentThread().getStackTrace()[1] 262 .getMethodName(); 263 enter(method); 264 boolean flag = false; 265 try { 266 getAuthenticatedSelfService().setChallengeValues(quesAnsMap); 267 flag = true; 268 } catch (Exception e) { 269 e.printStackTrace(); 270 System.out.println("e.toString() ->" + e.toString()); 271 System.out.println("e.getMessage() ->" + e.getMessage()); 272 setError(true); 273 } 274 exit(method); 275 return flag; 276 } 277 278 public void setError(boolean error) { 279 this.error = error; 280 } 281 282 public boolean isError() { 283 return error; 284 } 285 } 286
PropertyLoader.java : reads the configuratiosn and UI labels and anything else that should not be hard coded
1 package view.resources.backing; 2 3 import java.util.ResourceBundle; 4 5 public class PropertyLoader { 6 static String admin = null; 7 static String password = null; 8 static String oimURL = null; 9 static String oimLogin = null; 10 static String GRACE_DAYS = null; 11 12 static { 13 try { 14 ResourceBundle rbe = ResourceBundle.getBundle("view.backing." 15 + getResourceBundleName()); 16 admin = rbe.getString("admin"); 17 password = rbe.getString("password"); 18 oimURL = rbe.getString("oimURL"); 19 oimLogin = rbe.getString("oimLogin"); 20 GRACE_DAYS = rbe.getString("GRACE_DAYS"); 21 System.out.println(" admin->" + admin); 22 System.out.println(" oimURL->" + oimURL); 23 System.out.println(" oimLogin->" + oimLogin); 24 System.out.println(" GRACE_DAYS->" + GRACE_DAYS); 25 26 } catch (Exception e) { 27 e.printStackTrace(); 28 System.out.println("e.getMessage ->" + e.getMessage()); 29 } 30 31 } 32 33 public static void main(String[] args) { 34 35 } 36 37 private static String getResourceBundleName() { 38 String wpf = ""; 39 try { 40 wpf = ResourceBundle.getBundle("view.backing.whichpropfile") 41 .getString("whichpropfile"); 42 System.out.println("wpf ->" + wpf); 43 } catch (Exception e) { 44 e.printStackTrace(); 45 System.out.println("e.getMessage ->" + e.getMessage()); 46 } 47 return wpf; 48 } 49 50 static void load() { 51 try { 52 ResourceBundle rbe = ResourceBundle.getBundle("view.backing." 53 + getResourceBundleName()); 54 admin = rbe.getString("admin"); 55 password = rbe.getString("password"); 56 oimURL = rbe.getString("oimURL"); 57 oimLogin = rbe.getString("oimLogin"); 58 59 System.out.println(" admin->" + admin); 60 System.out.println(" oimURL->" + oimURL); 61 System.out.println(" oimLogin->" + oimLogin); 62 63 } catch (Exception e) { 64 e.printStackTrace(); 65 System.out.println("e.getMessage ->" + e.getMessage()); 66 } 67 68 } 69 } 70
UpdateDb.java : it tracks the account claim process in its internal schema table like whether the account is already claimed or not and few more tables which can be used by external applications
1 package model; 2 3 import java.util.ResourceBundle; 4 5 import java.sql.Connection; 6 import java.sql.DatabaseMetaData; 7 import java.sql.Date; 8 import java.sql.DriverManager; 9 import java.sql.PreparedStatement; 10 import java.sql.ResultSet; 11 import java.sql.SQLException; 12 13 import javax.naming.InitialContext; 14 15 import javax.sql.DataSource; 16 17 public class UpdateDb { 18 private String className = this.getClass().getSimpleName(); 19 private static String usedatasource = null; 20 private static String datasource = null; 21 private static String username = null; 22 private static String dbpassword = null; 23 private static String table = null; 24 private static String colum = null; 25 private static String claimcolum = null; 26 // private Connection con = null; 27 private static String url = null; 28 private static String claimSetCheck = null; 29 private static String updateClaim = null; 30 private static String selectGobtPac; 31 private static String updateGobtPac; 32 33 static { 34 System.out.println("Entering static block of UpdateDB"); 35 String wpf = ResourceBundle.getBundle("view.backing.whichpropfile") 36 .getString("whichpropfile"); 37 System.out.println("wpf ->" + wpf); 38 ResourceBundle rbe = ResourceBundle.getBundle("view.backing." + wpf); 39 usedatasource = rbe.getString("usedatasource"); 40 System.out.println("usedatasource -> " + usedatasource); 41 if (usedatasource.equalsIgnoreCase("true")) { 42 datasource = rbe.getString("datasource"); 43 System.out.println(" datasource->" + datasource); 44 } else { 45 username = rbe.getString("username"); 46 System.out.println(" username->" + username); 47 dbpassword = rbe.getString("dbpassword"); 48 url = rbe.getString("url"); 49 System.out.println(" url->" + url); 50 } 51 table = rbe.getString("table"); 52 System.out.println(" table->" + table); 53 colum = rbe.getString("colum"); 54 System.out.println(" colum->" + colum); 55 claimcolum = rbe.getString("claimcolum"); 56 System.out.println(" claimcolum->" + claimcolum); 57 claimSetCheck = "select " + colum + ", " + claimcolum + " from " 58 + table + " where " + colum + " = ?"; 59 System.out.println(" claimSetCheck->" + claimSetCheck); 60 updateClaim = "update " + table + " set " + claimcolum + "= ? where " 61 + colum + " = ?"; 62 System.out.println(" updateClaim->" + updateClaim); 63 64 selectGobtPac = "select GOBTPAC_USER,GOBTPAC_PIN from GOBTPAC where GOBTPAC_USER = ?"; 65 System.out.println(" gobtPacSet->" + selectGobtPac); 66 updateGobtPac = "update GOBTPAC set GOBTPAC_PIN = ?,GOBTPAC_PIN_EXP_DATE = ? where GOBTPAC_USER = ?"; 67 System.out.println(" updateGobtPac->" + updateGobtPac); 68 69 } 70 71 private void enter(String method) { 72 System.out.println("Entering " + method + " of class " + className); 73 } 74 75 private void exit(String method) { 76 System.out.println("Exiting " + method + " of class " + className); 77 } 78 79 private Connection getConnection() { 80 String method = Thread.currentThread().getStackTrace()[1] 81 .getMethodName(); 82 enter(method); 83 Connection con = null; 84 try { 85 if (usedatasource.equalsIgnoreCase("true")) { 86 InitialContext ctx = null; 87 ctx = new InitialContext(); 88 DataSource ds = (DataSource) ctx.lookup(datasource); 89 con = (Connection) ds.getConnection(); 90 } else { 91 92 if ((con == null) || (con.isClosed())) { 93 Class.forName("oracle.jdbc.driver.OracleDriver"); 94 con = DriverManager 95 .getConnection(url, username, dbpassword); 96 } 97 } 98 System.out.println("Got the Connection"); 99 } catch (Exception e) { 100 e.printStackTrace(); 101 System.out.println("e.toString() ->" + e.toString()); 102 System.out.println("e.getMessage() ->" + e.getMessage()); 103 104 } 105 106 exit(method); 107 return con; 108 } 109 110 public String updateClaimTable(String userid, String mail) { 111 String method = Thread.currentThread().getStackTrace()[1] 112 .getMethodName(); 113 enter(method); 114 String response = "false"; 115 Connection con = null; 116 try { 117 boolean isGoremailUpdated = updateGoremalTable(userid, mail); 118 System.out.println("isGoremailUpdated -> " + isGoremailUpdated); 119 // if (isGoremailUpdated == false) 120 // return response; 121 con = getConnection(); 122 if (con != null) { 123 con.setAutoCommit(true); 124 PreparedStatement isClaimSet = null; 125 System.out.println("claimSetCheck -> " + claimSetCheck); 126 isClaimSet = con.prepareStatement(claimSetCheck); 127 System.out.println("isClaimSet ->" + isClaimSet); 128 isClaimSet.setString(1, userid); 129 ResultSet rs; 130 rs = isClaimSet.executeQuery(); 131 System.out.println("Query Executed ->"); 132 Date dt = null; 133 int rowCount = 0; 134 while (rs.next()) { 135 dt = rs.getDate(claimcolum); 136 System.out.println(" dt->" + dt); 137 rowCount = rowCount + 1; 138 } 139 System.out.println("Number of Rows=" + rowCount); 140 if (rowCount == 1) { 141 if (dt == null) { 142 java.util.Date utilDate = new java.util.Date(); 143 java.sql.Date sqlDate = new java.sql.Date( 144 utilDate.getTime()); 145 System.out.println("utilDate:" + utilDate); 146 System.out.println("sqlDate:" + sqlDate); 147 148 PreparedStatement updateClaimSet = null; 149 System.out.println("updateClaim -> " + updateClaim); 150 updateClaimSet = con.prepareStatement(updateClaim); 151 System.out.println(" Before updating date-> "); 152 updateClaimSet.setDate(1, sqlDate); 153 System.out.println(" Before updating userid-> "); 154 updateClaimSet.setString(2, userid); 155 System.out.println(" After updating both -> "); 156 int rs2; 157 rs2 = updateClaimSet.executeUpdate(); 158 System.out.println("rs2 ->" + rs2); 159 response = "CLAIMED"; 160 161 } else { 162 response = "CLAIMED_EARLIER"; 163 } 164 } else if (rowCount == 0) { 165 response = "NO_USER_FOUND"; 166 } else { 167 response = "MULTIPLE_USER_FOUND"; 168 } 169 } 170 171 } catch (Exception e) { 172 e.printStackTrace(); 173 System.out.println("e.toString() ->" + e.toString()); 174 System.out.println("e.getMessage() ->" + e.getMessage()); 175 176 } finally { 177 if (con != null) { 178 try { 179 con.close(); 180 } catch (Exception e) { 181 e.printStackTrace(); 182 System.out.println("e.toString() ->" + e.toString()); 183 System.out.println("e.getMessage() ->" + e.getMessage()); 184 185 } 186 } 187 } 188 System.out.println("response ->" + response); 189 exit(method); 190 return response; 191 } 192 193 public String updateGobtpacTable(String userid, String pin, 194 java.util.Date pin_exp) { 195 String method = Thread.currentThread().getStackTrace()[1] 196 .getMethodName(); 197 enter(method); 198 String response = "false"; 199 Connection con = null; 200 try { 201 con = getConnection(); 202 if (con != null) { 203 con.setAutoCommit(true); 204 PreparedStatement isClaimSet = null; 205 System.out.println("selectGobtPac -> " + selectGobtPac); 206 isClaimSet = con.prepareStatement(selectGobtPac); 207 System.out.println("isClaimSet ->" + isClaimSet); 208 isClaimSet.setString(1, userid); 209 ResultSet rs; 210 rs = isClaimSet.executeQuery(); 211 System.out.println("Query Executed ->"); 212 String dt = null; 213 int rowCount = 0; 214 while (rs.next()) { 215 dt = rs.getString("GOBTPAC_PIN"); 216 System.out.println(" dt->" + dt); 217 rowCount = rowCount + 1; 218 } 219 System.out.println("Number of Rows=" + rowCount); 220 if (rowCount == 1) { 221 if (dt == null) { 222 223 PreparedStatement updateClaimSet = null; 224 System.out 225 .println(" updateGobtPac -> " + updateGobtPac); 226 updateClaimSet = con.prepareStatement(updateGobtPac); 227 System.out.println(" Before updating pin-> "); 228 updateClaimSet.setString(1, pin); 229 System.out.println(" Before updating pin expiry -> "); 230 java.sql.Date sqlDate = new java.sql.Date( 231 pin_exp.getTime()); 232 System.out.println("utilDate:" + pin_exp); 233 System.out.println("sqlDate:" + sqlDate); 234 updateClaimSet.setDate(2, sqlDate); 235 updateClaimSet.setString(3, userid); 236 System.out.println(" After updating all -> "); 237 int rs2; 238 rs2 = updateClaimSet.executeUpdate(); 239 System.out.println("rs2 ->" + rs2); 240 response = "CLAIMED"; 241 242 } else { 243 response = "CLAIMED_EARLIER"; 244 } 245 } else if (rowCount == 0) { 246 response = "NO_USER_FOUND"; 247 } else { 248 response = "MULTIPLE_USER_FOUND"; 249 } 250 } 251 252 } catch (Exception e) { 253 e.printStackTrace(); 254 System.out.println("e.toString() ->" + e.toString()); 255 System.out.println("e.getMessage() ->" + e.getMessage()); 256 257 } finally { 258 if (con != null) { 259 try { 260 con.close(); 261 } catch (Exception e) { 262 e.printStackTrace(); 263 System.out.println("e.toString() ->" + e.toString()); 264 System.out.println("e.getMessage() ->" + e.getMessage()); 265 266 } 267 } 268 } 269 System.out.println("response ->" + response); 270 exit(method); 271 return response; 272 } 273 274 private boolean updateGoremalTable(String userid, String mail) { 275 String method = Thread.currentThread().getStackTrace()[1] 276 .getMethodName(); 277 enter(method); 278 boolean response = false; 279 Connection con = null; 280 try { 281 con = getConnection(); 282 if (con != null) { 283 con.setAutoCommit(true); 284 PreparedStatement updateGoremalState = null; 285 String updateSt = "UPDATE GOREMAL set GOREMAL_EMAIL_ADDRESS = ? WHERE GOREMAL_USER_ID = ?"; 286 System.out.println(" updateSt-> " + updateSt); 287 updateGoremalState = con.prepareStatement(updateSt); 288 System.out.println(" Before updating mail address-> "); 289 updateGoremalState.setString(1, mail); 290 System.out.println(" Before updating userid-> "); 291 updateGoremalState.setString(2, userid); 292 System.out.println(" After updating both -> "); 293 int rs2; 294 rs2 = updateGoremalState.executeUpdate(); 295 System.out.println("rs2 ->" + rs2); 296 response = true; 297 } 298 } catch (Exception e) { 299 e.printStackTrace(); 300 System.out.println("e.toString() ->" + e.toString()); 301 System.out.println("e.getMessage() ->" + e.getMessage()); 302 303 } finally { 304 if (con != null) { 305 try { 306 con.close(); 307 } catch (Exception e) { 308 e.printStackTrace(); 309 System.out.println("e.toString() ->" + e.toString()); 310 System.out.println("e.getMessage() ->" + e.getMessage()); 311 312 } 313 } 314 } 315 System.out.println("response ->" + response); 316 exit(method); 317 return response; 318 } 319 320 } 321
Properties Files
ViewControllerBundle.properties: Automtically used for UI labels in adf pages
#
ACCOUNT_INFORMATION=Account Information
#UID
UID=UID
#PIN
PIN=PIN
#Zip Code
ZIP_CODE=Zip Code
#Date of Birth
DATE_OF_BIRTH=Date of Birth
#Next
NEXT=Next
#Cancel
CANCEL=Cancel
#Account Claim Validation
ACCOUNT_CLAIM_VALIDATION=Account Claim Validation
myApp.properties: Application Specific properties file
admin=xelsysadm
password=password
oimURL=t3://host:14010/oim
oimLogin=http://host:14010/oim/faces/pages/Self.jspx
GRACE_DAYS=3
# DB Properties
#hostname=hostname
#DBservicename=servicename
#DBSIDname=sidname
#DBport=1521
dbuser=dbuser
dbpassword=dbpassword
table=table
colum=colum
claimcolum=claimcolum-date
url=jdbc:oracle:thin:@hostname:1521:sid
#DateSource
usedatasource=true
datasource=jdbc/iamdatasource
Nice post, very useful blogs with very useful information, thank you for sharing this post custom web application development
ReplyDelete