Dans les joies d’ADF, il y a le JAAS. C’est sympa, sécurisé et bien conçu. Seulement voilà, trop souvent il faut commencer à sortir du code, du code Java. Dans un meta-framework, c’est dommage ! Mais, en fait, en cherchant un peu, en fouinant un peu, on trouve des astuces, des détails… sans code c’est possible.
Et voila comment :
Step 1) créez une page de login, disons login.jspx (au hasard). Il y a donc au minimum 3 objets
un champ text de login, un champ password, un bouton de submit.
premier trick : les valeurs des champs objets doivent êtres prises dans le request scope
<f:view> <af:document id="d1" title="Login page"> <af:form id="f1"> <af:inputText label="Login" id="it1" value="#{requestScope.userid}"/> <af:inputText id="it2" label="Password" value="#{requestScope.password}"/> <af:commandButton text="submit" id="cb1" action="approx"/> </af:form> </af:document> </f:view>
cette page nous emmène donc via l’action « approx » vers une page jspx de proxy d’authentification !
Step 2) la page loginProxy en JEE container
<?xml version='1.0' encoding='UTF-8'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <f:view> <af:document title="login" id="d1"> <af:clientListener method="formSubmit" type="load"/> <af:resource type="javascript"> function formSubmit(evt) { var form = document.getElementById("loginData"); form.submit(); } </af:resource> <f:verbatim> <form id="loginData" name="loginData" method="POST" action="j_security_check"> <input id="userid" type="hidden" name="j_username" value="${requestScope.userid}"/> <input id="password" type="hidden" name="j_password" value="${requestScope.password}"/> </form> </f:verbatim> </af:document> </f:view> </jsp:root>
où l’on voit que la page en question récupère les valeurs données, les cache, les wrap et les soumets à « j_security_chek ».
Bien évidemment, il est possible d’utiliser ce mécanisme depuis et vers d’autre point d’entrée. Mais cela est un autre histoire
N’oubliez pas ! il faut quand même créer la règle de navigation de * vers la page loginProxy.jspx conformément à l’action du bouton de login de login.jspx (ici « approx »)
Have Fun !