0 Replies Latest reply on May 3, 2015 4:37 PM by Barry Stevenson

    Is it possible to restore the PicketLink "original request" when using a custom faces Login page and CDI backing bean?  Using PicketLink IDM, JPA, and Simple Authenticator Login Page but Unable restoreOriginal Request.

    Barry Stevenson Newbie

      PicketLink Usage Scenario


      User requests a webpage located in a PicketLink protected folder. When PicketLink detects reqeust for a protected folder, it invokes a faces login.xhtml page which passes username and password to a custom CDI backing bean that invokes AuthenticationResult result = identity.login()Upon authentication failed I need to display a unique faces error message then let the user retry the authentication.  However, once authentication is successful I then want to display a faces successful message and be able to restore the user's original webpage "request" and redirect to that original page.  Where can I retrieve the originally request page name?  Is it kept in a request cache that I can retrieve it from?


      Any insight would be appreciated.




      <?xml version="1.0" encoding="UTF-8"?>

      <ui:composition xmlns="http://www.w3.org/1999/xhtml"






                      <ui:param name="pageHeading" value="Login1" />

                      <ui:param name="pageTitle" value="Login1" />

                      <ui:define name="center">

                                      <p:panel header="Website Authentication Login1"

                                                      rendered="#{not identity.loggedIn}"

                                                      style="width: 50%; background-color: #FFFACD;">

                                                      <h:panelGrid columns="2">

                                                                      <p:outputLabel for="name" value="Username:" />

                                                                      <p:inputText id="name" value="#{loginCredentials.userId}"

                                                                                      required="true" />

                                                                      <p:outputLabel for="password" value="Password:" />

                                                                      <p:password id="password" value="#{loginCredentials.password}"

                                                                                      redisplay="true" required="true" />




                                                                                                      value="Login with any of the following username/password combinations.  Each of these accounts has different privileges assigned to them." />

                                                                                      <h:panelGrid columns="1" style="padding-left: 15px;">

                                                                                                      <p:outputLabel value="john/demo">


                                                                                                      <p:outputLabel value="mary/demo">


                                                                                                      <p:outputLabel value="jane/demo">





                                                      <f:facet name="footer">

                                                                      <p:commandButton id="login" value="Login1"

                                                                                     action="#{securityController.login}" ajax="false" />






      CDI Backing Bean


      import java.io.Serializable;

      import java.util.Date;


      import javax.inject.Inject;

      import javax.inject.Named;


      import org.jboss.logging.Logger;

      import org.omnifaces.util.Messages;

      import org.picketlink.Identity;

      import org.picketlink.Identity.AuthenticationResult;



      * Bean used to control authentication process so that in the event of a failed

      * authentication display an appropriate FacesMessage.




      public class SecurityController implements Serializable {


                      private static final long serialVersionUID = 1L;


                      private Identity identity;

                      private static final Logger logger = Logger.getLogger("application");


                      public String login() {

                                     AuthenticationResult result = identity.login();

                                      if (AuthenticationResult.FAILED.equals(result)) {

                                                      logger.info("Login unsuccessful");

                                                      Messages.addGlobalError("Authentication was unsuccessful - invalid username/password; "

                                                                                      + new Date());

                                                      return "goto.login";

                                      } else {

                                                      logger.info("Login successful");

                                                      Messages.addFlashGlobalInfo("Login successful; " + new Date());



                                                       * Is there some way to to find and restore from requestCache the name of the caller's original web page request?


                                                      return ? = restoreOrignalRequest;







      PicketLink HTTP Configuration


      import javax.enterprise.event.Observes;

      import org.picketlink.config.SecurityConfigurationBuilder;

      import org.picketlink.event.SecurityConfigurationEvent;


      public class HttpSecurityConfiguration {


                      public void onInit(@Observes SecurityConfigurationEvent event) {

                                      SecurityConfigurationBuilder builder = event.getBuilder();