Astuce | ||
---|---|---|
| ||
Ce paragraphe non exhaustif permet de découvrir esup-commons V2 au travers du projet esup-example. Ce dernier servira de bac à sable permettant de toucher du doigt les aspects incontournables pour le développement d'un projet.
...
Sommaire :
Sommaire | ||
---|---|---|
|
...
Installation
A l'aide du plugin Subversion (en perspective "SVN Repository Exploring") faire un checkout de la dernière version stable de esup-example :
Bloc de code |
---|
https://subversion.cru.fr/esup-commons/tags/<dernière version>/esup-example |
Pour connaître la dernière version release voir : Changelog V2 >> capture faire quand tags
Faire un Checkout...
Choisir Check out as a project in the workspace
Nommer le projet "esup-example" et laisser les paramètres par défaut puis Finish
Passer en perspective "Java"
Clic-droit sur le projet Maven => Enable Dependency Managment.
Comme on l'a dit précédemment, un projet esup-commons est composé de plusieurs sous-projets ou modules situés ici dans des sous-répertoires contenant chacun un fichier pom.xml, qui peuvent être des projets indépendants :
Faire clic-droit sur le projet Import... Import… => Maven => Existing Maven Projects :
Ceci permet de transformer chaque module de Esup_esup-commons en projet à part entière grâce aux fichiers pom.xml déclarés dans les différents répertoires du projet père_
Là Eclipse retrouve tout tous les pom.xml , : les laisser tous cochés
Cliquer sur Finish et : il construit alors tous les projets.
Ceci permet de lier le projet à ses dépendances Maven déclarées dans les fichiers pom.xml situé situés dans chaque modulesmodule. Il créé un répertoire .m2 s'il n'existe pas. Enfin un petit "M" apparait sur l'icône du projet )
On constate que cette tâche entraîne le téléchargement de toutes les librairies nécessaires, c'est pourquoi elle peut-être relativement longue suivant le nombre de librairies pré-existantes dans votre répertoire .m2 (téléchargées pour d'autres projets)
Il peut arriver que les chemin chemins vers des sources soient calculés depuis la racine alors qu'elles que celles-ci se trouvent dans src/main/java, src/main/resources etc. Plutôt que de faire cela manuellement (clic-droit sur le projet => Build Path => Configure Build Path et faire cela à la main faire ), il suffit de faire un clic-droit sur le projet => Maven => Update Project Configuration.
Puis faire clic-droit sur le projet => Run As => Maven install
Resultat Résultat :
Démarrage
Remarque | ||
---|---|---|
| ||
Concernant le serveur embarqué |
Via Eclipse : Lancer Run => Run configurations...
Sélectionner "Maven Build" => "Add" (ou double-clic) puis Choisir le répertoire esup-example et l'action jetty:run
...
Un projet esup-commons peut proposer un serveur d'application embarqué (pour un démarrage standalone), de manière presque transparente grâce à Maven et à l'utilisation du plugin Jetty.
Ce plugin se base sur la structuration préconisée par défaut dans un projet maven et retrouve automatiquement la webapp à lancer. Ainsi, à partir du moment où le projet respecte les standards Maven, l'utilisation du plugin jetty ne nécessite pas de configuration supplémentaire (hormis éventuellement un contextPath)
Bloc de code |
---|
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<contextPath>/</contextPath>
</configuration>
</plugin>
|
Comme on l'a vu précédemment dans 1.2 Méthodologie de développement, esup-commons propose différents types de projets (jsf-mixte, jsf-servlet etc.).
Le démarrage ne peut se faire que sur les modules packagés sous forme de WAR (qui sont donc dépendants des modules sous-jacents packagés en jar)
Dans esup-exemple, plusieurs types de projet sont implémentés il faudra donc choisir.
Via Eclipse : Lancer le projet par un clic-droit sur le projet esup-example-jsf-servlet par exemple Run AS => Maven build... et choisir l’action jetty:run
On pourra modifier par Run => Run configurations… et sélectionner "Maven Build"
Lancer la commande.
Au premier démarrage on constate dans la console le téléchargement d'un certain nombre de librairies et la création d'une base de données(1637 INFO org.hibernate.tool.hbm2ddl.DatabaseMetadata - table not found: User
1639 INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - schema update complete).
...
Dans un navigateur lancer localhost :8080... on se trouve redirigé vers l'authentification cas de Rennes mais ça fonctionne 8080… on obtient ceci :
On constate que l'on est authentifié en bourges.
On va maintenant va juste changer la page méthode d'authentification afin de pouvoir se connecter en CAS.
Pour cela, ouvrir /src/main/resources/properties/auth/auth.xml en paramêtrer un CasFilterAuthenticationService à la place du OfflineFixedUserAuthenticationService
Bloc de code |
---|
<bean id="authenticator" lazy-init="true"
class="org.esupportail.example.services.authentication.AuthenticatorImpl">
<property name="authenticationService" ref="servletAuthenticationService" />
</bean>
<bean id="servletAuthenticationService" lazy-init="true"
class="org.esupportail.commons.services.authentication.CasFilterAuthenticationService">
</bean>
|
Modifier ensuite modifier fichier /src/main/webapp/WEB-INF/web.xml ligne 150 ...et y indiquer l'adresse du votre serveur CAS
Exemple :
Bloc de code |
---|
<!-- CAS --> <filter> <filter-name>CAS Authentication Filter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>https://cas.uhp-nancy.fr/cas/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8080</param-value> </init-param> </filter> |
... … et 169
Bloc de code |
---|
<filter> <filter-name>CAS Validation Filter</filter-name> <!-- <filter-class>org.jasig.cas.client.validation.Saml11TicketValidationFilter</filter-class> --> <filter-class>org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>https://cas.uhp-nancy.fr/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8080</param-value> </init-param> </filter> |
A l'enregistrement l’enregistrement on constate dans la console que ça recharge le projet.
...
Retenter un localhost:8080
Et et vérifier que l'authentification fonctionne
Découverte
Une fois authentifié on arrive sur ceci :
Volet CAS Demo
Le libellé CURRENT.USER n'est pas déclaré et traduit ?
On constate :
Bloc de code |
---|
????? CURENT.USER ????? |
Remarque | ||
---|---|---|
| ||
Concernant l'internationalisation |
Dans les logs on voit le message :
Bloc de code |
---|
2010-11-24 15:58:45,780 WARN [org.esupportail.commons.services.i18n.BundleMap] -
no string found for key 'CURRENT.USER' and locale 'fr' |
Dans properties/i18n/bundles ouvrir Custom_fr.properties et Custom_en.properties
Et y ajouter respectivement les entrées :
Bloc de code |
---|
CURRENT.USER = Utilisateur courant |
Et
Bloc de code |
---|
CURRENT.USER = Current user |
Vérifier que c'est bon désormais
On ne récupère que l'uid ?
Dans les logs on a :
Bloc de code |
---|
2010-11-24 16:00:18,118 DEBUG [org.esupportail.example.services.authentication.AuthenticatorImpl] -
found auth info in session: User#25411576[id=[cbissler], displayName=[null], admin=[false], language=[null]] |
On vérifie dans AuthenticatorImpl.java, rien d'anormal on ne positionne que l'UID et on n'interroge pas le LDAP
Affichage se fait dans /src/main/webapp/stylesheets/welcome.jspx
Bloc de code |
---|
<rich:panelBarItem label="CAS demo" name="CAS">
<h:outputText value="#{msgs['CURRENT.USER']} #{welcomeController.currentUserId}"/>
</rich:panelBarItem> |
Depuis WelcomeController.java suivre la récupération de l'utilisateur on retombe dans la méthode getUser de AuthenticatorImpl.java
WelcomeController -> AbstractContextAwareController (getCurrentUser) -> SessionController (getCurrentUser) -> Authenticator (getUser)
Pourquoi affiche-t-on "Nom – USER" ?
Suivre depuis /src/main/webapp/stylesheets/welcome.jspx et arriver sur /src/main/webapp/stylesheets/_include/_header.jspx
welcome.jspx (l.10)? template.jspx ? _include/_header.jspx
Bloc de code |
---|
<t:outputText value="Nom - USER" styleClass="span_currentUser" /> |
Donc c'est en dur tout est normal
Volet Ajax Demo
Remarque | ||
---|---|---|
| ||
Concernant les librairies de vues etc. |
Lorsque l'on tape quelque chose dans le champ ça le reporte en même temps à côté.
Volet Exception demo
Cliquer sur le bouton "test exception" le mot ERROR s'affiche !
Envoyer la levée d'exception par mail
On constante l'erreur dans les logs de la console suivie de :
Bloc de code |
---|
ERROR [org.esupportail.commons.services.smtp.SmtpUtils] - an exception occured while sending the email to '"Liste devel
(normally sent to bugs@domain.edu)" <example-devel@liste.domain.edu.fr>' using SMTP server 'smtp.univ-rennes1.fr:25'.
ERROR [org.esupportail.commons.services.smtp.SmtpUtils] - javax.mail.MessagingException: Could not connect to SMTP host:
smtp.univ-rennes1.fr, port: 25;
[...]
|
Corriger dans config.properties
Bloc de code |
---|
########################################################################
# SMTP
#
smtp.host=persmail.uhp-nancy.fr
smtp.user=login
smtp.password=xxxx
smtp.fromEmail=admin.email@univ.fr
smtp.fromName=ESUP-Portail Example
smtp.interceptAll=true
smtp.interceptEmail=admin.email@univ.fr
smtp.interceptName=Liste devel
|
Retenter et constater qu'un mail est bien parti.
Loguer les erreurs/messages dans un fichier
Dans config.properties on constate ceci :########################################################################
- LOGGING
log.level=WARN
log.output=stdout
log.pattern=%d %p %c - %m%n
log.file=D:/esup-example.log
Lorsque l'on change ceci cela n'a aucun effet, si on regarde dans le war ces valeurs ne sont pas prises en compte.
Avertissement |
---|
Cette partie doit être supprimée |
En revanche dans profiles.xml<profiles>
<profile>
<id>developpement</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<deploy.type>servlet</deploy.type>
<cas.url>https://sso-cas.univ-rennes1.fr</cas.url>
<tomcat.host>localhost</tomcat.host>
<tomcat.port.string>:8080</tomcat.port.string>
<log.level>INFO</log.level>
<log.output>stdout</log.output>
<log.file>/tmp/esup-blank.log</log.file>
<cache.path>/tmp/esup-blank</cache.path>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<deploy.type>servlet</deploy.type>
<cas.url>https://sso-cas.univ-rennes1.fr</cas.url>
<tomcat.host>localhost</tomcat.host>
<tomcat.port.string>:8080</tomcat.port.string>
<log.level>INFO</log.level>
<log.output>file</log.output>
<log.file>/tmp/esup-blank.log</log.file>
<cache.path>/tmp/esup-blank</cache.path>
</properties>
</profile>
</profiles>
Si on adapte la partie developpement qui est actif par défaut en mettant un log.output=file et le chemin vers le log.file ça marche
Remarque |
---|
A quoi sert le <cas.url>https://sso-cas.univ-rennes1.fr</cas.url>? Si on modifie ici quel impact? |
...
Fonctionnement des profiles Maven
Changer le nom de l'application
Le mais est annoncé comme provenant de l'application esup-blank et on constate également que le titre de la page est esup-blank.
Pour cela modifier dans /src/main/resources/misc/application.xml (ligne 27) la balise :
Bloc de code |
---|
<property name="name" value="esup-blank">... |
en
Bloc de code |
---|
<property name="name" value="esup-example">... |
Constater que le titre de la page a changé et que le mail envoyé lors de l'exception est bien intitulé "esup-example 0.0.1".
On changera également dans /src/main/webapp/WEB-INF/web.xml (ligne 9)
Bloc de code |
---|
<display-name>esup-example</display-name> |
Remarque |
---|
Où apparait ceci? quel impact? |
Volet JPA demo
Remarque | ||
---|---|---|
| ||
Concernant hibernate, JPA |
Ajout d'une entrée dans une table
Essayer d'ajouter, modifier ou supprimer un utilisateur.
Essayer le fonctionnement du paginateur.l’authentification fonctionne