Beans de configuration
avril 19, 2007 — Charlie DuboisDans le canal CMonDossierWeb d’origine, certaines parties sont configurables par l’intermédiaire du fichier CMonDossierWeb.xml : extension des mails etudiant (@univ-nancy2.fr par exemple), utilisation du canal MailTo ou d’un lien ‘mailto :’ pour l’envoi des mail, affichage du calendrier de rentrée etc.
Toutes ces possibilités doivent être présentes dans esup-mondossierweb, c’est pourquoi nous avons créé un fichier de configuration monDossierWeb.xml placé dans properties/monDossierWeb. Ce fichier contient la définition de 2 beans utiles à l’application et configurables : ‘config’ et ‘security’. De cette manière nous n’avons par la suite qu’à injecter le bean utile dans ceux ayant besoin de leurs paramètres ou de leurs méthodes.
Nous avons bien sur du rajouter l’import :
|
<import resource=”monDossierWeb/monDossierWeb.xml” /> |
Dans le fichier properties/applicationContext.xml.
1/ Le bean ‘config’ :
Il sert simplement à stocker dans un bean les paramètres de base de l’application. Il ne propose aucune méthode (à part ses setters et getters bien sur).
|
<bean id=”config” class=”org.esupportail.mondossierweb.domain.beans.Config”>
<description>un bean pour stocker configuration de l’application.</description>
<property name=”extMail”> <description>l’extension au login pour l’e-mail des étudiants</description> <value>@univ-nancy2.fr</value> </property>
<property name=”lienContact”> <description>l’e-mail du lien ‘nous contacter’</description> <value>scolarite@univ-nancy2.fr</value> </property>
<property name=”mailInstalle”> <description>vrai si la possibilité d’appeler le canal MailTo est implémentée et que l’on souhaite l’en servir pour l’envoi de mail. Sinon l’application utilise un simple lien ‘mailto:’</description> <value>false</value> </property>
<property name=”msgConnexion”> <description>le message d’erreur de connection</description> <value>Vous n’êtes pas connecté</value> </property>
<property name=”msgRefusAcces”> <description>le message d’interdiction d’acces</description> <value>Vous n’avez pas accès à cette partie.</value> </property>
<property name=”calExam”> <description>utiliser calExam a la place de Calendrier original</description> <value>false</value>
</property>
<property name=”calRent”> <description>utiliser le calendrier de rentrée</description> <value>false</value> </property>
<property name=”resultats”> <description>utiliser Resultats a la place de Notes original</description> <value>false</value> </property>
</bean> |
‘config’ est par exemple utilisé dans le fichier template-contact.xml pour afficher un simple lien ‘mailto :’ et récupérer l’adresse de la scolarité pour le lien ‘nous contacter’ :
|
<h:outputText rendered=”#{!config.mailInstalle}”> <a href=”mailto:#{config.lienContact}”><b><u>Nous contacter</u></b></a> </h:outputText> |
Il est, par exemple, aussi utilisé par le converter ‘EmailConverter’ pour donner l’adresse mail d’un étudiant à partir de son login :
|
public String getMail(String login) { if (config.getExtMail() != null && !config.getExtMail().equals(”")) return login + config.getExtMail(); return “”;
} |
2/ Le bean ‘security’ :
Il sert à configurer l’accès à l’application. On y renseigne le type ldap correspondant à l’étudiant (si ldap renvoi ce type pour le login de l’utilisateur, il est étudiant, sinon on procède à d’autres vérifications), et la liste des groupes uportal dont les membres sont autorisés à accéder à l’application en tant qu’enseignant.
|
<bean id=”security” class=”org.esupportail.mondossierweb.domain.beans.Security”> <description> bean pour stocker la configuration de l’accès à l’application. </description>
<property name=”service” ref=”service”> <description>Le service d’accès à la base de donnée</description> </property>
<property name=”ldapService” ref=”ldapService”> <description>le service ldap</description> </property>
<property name=”portalService” ref=”portalService”> <description>le service uportal</description> </property>
<property name=”typeEtudiantLdap”> <description>Le type ldap designant un etudiant</description> <value>student</value> </property>
<property name=”listeGroupesPortal”> <description>La liste des groupe uportal autorisant l’accès à mondossierWeb en tant qu’enseignant</description> <list> <value>Tous les groupes de personnes</value> </list> </property>
</bean> |
Il fournit aussi des méthodes indispensables à l’identification de l’utilisateur. En effet, ‘Security.java’ implémente l’interface ‘ISecurity’, qui définit les méthodes utilisées par le SessionController lors de l’identification de l’utilisateur. Voici le code de l’interface ‘ISecutity’ :
|
public interface ISecurity {
//donne le type de l’utilisateur dans l’application a partir de son identifiant public String getTypeUser(String id);
//donne le type ldap de l’utilisateur a partir de son identifiant public String typeLdap(String login); } |
Et voici un exemple de notre implémentation des méthodes de ‘ISecurity’ dans ‘Security’ à l’heure actuelle:
|
/** * @param login de l’utilisateur * @return le type retourné par ldap. */ public String typeLdap(String login){ try{ LdapUser ldapuser=ldapService.getLdapUser(login); Map mattributs =ldapuser.getAttributes(); List<String> ltype=(List<String>)mattributs.get(”edupersonprimaryaffiliation”); return ltype.get(0); }catch(Exception e){ return “error”; } }
/** * @param id identifiant de l’utilisateur * @return type utilisateur (etudiant, enseignant ou non-autorise) */ public String getTypeUser(String id){ String typeuser=”"; String type=typeLdap(id);
if(type.equals(getTypeEtudiantLdap())){ typeuser=”etudiant”; }else{
//on cherche a savoir si l’employé a acces (ex: c’est un enseignant) //si autorise type=enseignant, sinon type=non-autorise try{ //recupère l’utilisateur uportal PortalUser portaluser = portalService.getUser(id); //on cherche si il appartient a un groupe boolean useruportal=false;
//on reucpère la liste de groupe mis dans le bean security List<String> listegroupes=getListeGroupesPortal(); //on regarde si il appartient a un des groupes for(String nomgroupe : listegroupes){ //on cherche le groupe PortalGroup pgroup=portalService.getGroupByName(nomgroupe); if(pgroup!=null){ //on regarde si l’utilisateur appartient a ce groupe if(portalService.isUserMemberOfGroup(portaluser, pgroup)){ //c’est un utilisateur uportal useruportal=true; }
} if(useruportal){ //c’est un utilisateur uportal il est autorisé en tant qu’enseignant typeuser=”enseignant”; }else{ //Test présence dans la table utilisateur d’Apogee //on regarde si il est dans la table utilisateur String coduti=service.getCodUti(id);
if(coduti!=null){ typeuser=”enseignant”; }else{ typeuser=”non-autorise”; } } }catch(Exception e){ //erreur avec uportal //Test présence dans la table utilisateur de Apogee //on regarde si il est dans la table utilisateur String coduti=service.getCodUti(id); if(coduti!=null){ typeuser=”enseignant”; }else{ typeuser=”non-autorise”; } } } return typeuser; } |