Adding "remember me" functionality to Oracle ADF login
The following example based on Jdeveloper 11g R2 (11.1.2.3)
There are many ways to implement login page in Oracle ADF. One can create custom login logic or use build in security mechanism. This is covered in many blogs and also in official Oracle documentation and I am not going to touch it in this post.
I do want to explain how to add a functionality for "remember me", so if user already logged in and checked "remember me" option, next time he logs into the application he will not be asked to enter the credentials again
I started by creating some login form with "remember" check box
Definition of the check box button
When I press the login button I check that the check box is checked and if it checked I save the credentials in the cookies
I created some other dummy page that I expect to see if user logged in with Cookies
Here my adfc-config.xml file
"AfterLogin" page contains only text "some other page"
Now I want my cookies to be checked when user enters the login page ("LoginTest" page in my application)
I will do it with JavaScript that will check the cookies after the page is loaded
Note!!! I tried to do it with all other methods like "afterPhase" or by using "router" in the Task-Flow. It didn't work
When the page is loaded eventually I call "goToDashBoard" method in my backing bean
public void goToDashBoard(ClientEvent clientEvent) {
checkCookies();
}
public String checkCookies() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map<String, Object> cookies = externalContext.getRequestCookieMap();
Cookie user= (Cookie)cookies.get("nam.user.cookie");
Cookie pass= (Cookie)cookies.get("nam.pass.cookie");
Cookie domain = (Cookie)cookies.get("nam.domain.cookie");
if (user!=null &&
pass!=null &&
domain!=null &&
user.getValue()!=null &&
pass.getValue()!=null &&
domain.getValue()!=null)
{
this._username=user.getValue();
this._password = pass.getValue();
this._domain = domain.getValue();
NavigationHandler nvHndlr = FacesContext.getCurrentInstance().getApplication().getNavigationHandler();
nvHndlr.handleNavigation(FacesContext.getCurrentInstance(), null, "AfterLogin");
}
}
All I do here is reading the information from Cookies and if credentials are found to be stored in the Cookies I programmatically execute "AfterLogin" control case (see the print screen of adfc-config.xml)