11. 1 - Authentification
En cas d’authentification par formulaire
Placer un objet marqueur en session pour
mémoriser l’authentification
mercredi 7 mars 12
12. 2 - Etat conversationnel
Utiliser la session pour stocker l’état de la
conversation entre le client et le serveur
Exemples :
Panier
Entité en cours de modification
....
mercredi 7 mars 12
13. Serveur
GET /petsearch?query=dog
1337AZERTYUIOP
mercredi 7 mars 12
14. Serveur
GET /petsearch?query=dog
1337AZERTYUIOP
search [Pet, Pet, Pet, Pet, Pet, Pet]
mercredi 7 mars 12
15. Serveur
GET /petsearch?query=dog
1337AZERTYUIOP
search [Pet, Pet, Pet, Pet, Pet, Pet]
GET /pet?idx=2
mercredi 7 mars 12
16. Serveur
GET /petsearch?query=dog
1337AZERTYUIOP
search [Pet, Pet, Pet, Pet, Pet, Pet]
GET /pet?idx=2 pet com.myapp.Pet@566577
mercredi 7 mars 12
17. Serveur
GET /petsearch?query=dog
1337AZERTYUIOP
search [Pet, Pet, Pet, Pet, Pet, Pet]
GET /pet?idx=2 pet com.myapp.Pet@566577
POST /pet
mercredi 7 mars 12
18. 3 - Cache
Eviter de recharger des objets depuis leur
système de stockage
Exemples :
Utilisateur, Roles
Objets fréquemment utilisés : Client,
Articles, .....
mercredi 7 mars 12
26. A
session
Load
Load
Balancer
Balancer
1337AZE
1337AZE
RTYUIOP
A
A
B
RTYUIOP
mercredi 7 mars 12
27. A
session
Load
Load
Balancer
Balancer
1337AZE
1337AZE
RTYUIOP
A
A
B
RTYUIOP
mercredi 7 mars 12
28. A
session
Load
Load
Balancer
Balancer
1337AZE
RTYUIOP
A B
?
mercredi 7 mars 12
29. A
session
Load
Load
Load
Load
Balancer
Balancer
Balancer
Balancer
A B
session
mercredi 7 mars 12
30. 3 - Fourre tout
Difficile de gérer le cycle de vie des objets en
session
Syndrome de la session obèse, refactoring
complexe
Typage faible
mercredi 7 mars 12
31. 4 - Scalabilité
En cas de forte charge, les sessions existantes
ne peuvent pas profiter de l’ajout de nouveaux
serveurs
Quelle taille mémoire provisionner pour ma
session ?
mercredi 7 mars 12
32. 5 - Quelle durée de vie
Réglage du timeout de session : durée de
survie de la session après la dernière requête
de l’utilisateur
Trop court : la session ne survie pas à une
pause dans l’utilisation de l’application
Trop long : utilisation de ressources inutiles
mercredi 7 mars 12
33. 6 - Mise à jour de
l’application
La session contient des objets complexes de
l’application, elle est donc liée à une version
de l’application
Procédures complexe de migration
mercredi 7 mars 12
38. Serveur
GET /petsearch?query=dog
1337AZERTYUIOP
mercredi 7 mars 12
39. Serveur
GET /petsearch?query=dog
1337AZERTYUIOP
mercredi 7 mars 12
40. Serveur
GET /petsearch?query=dog
1337AZERTYUIOP
GET /pet/543/chimpanzee
mercredi 7 mars 12
41. Serveur
GET /petsearch?query=dog
1337AZERTYUIOP
GET /pet/543/chimpanzee
POST /pet/543
mercredi 7 mars 12
42. Cookie
Echangé à chaque requête/réponse
Peut être signé
4Ko Maximum : privilégier l’échange
d’identifiants vs objets complexes
Peut être persistant
<!> Partagé entre les onglets
mercredi 7 mars 12
43. Champs caché
Ex : Mémoriser l’identifiant de l’entité en
cours de modification
Onglet friendly
<!> Vérifier les droits lors du GET et du POST
mercredi 7 mars 12
44. Etat coté client
Arbre DOM
Variables globales JavaScript
Applications «Single Page»
Ex : GWT
Stockage local HTML5
Web Storage, Indexed DB, Web SQL
mercredi 7 mars 12
45. Etat coté serveur
Base de données
Cache distribué
mercredi 7 mars 12
49. Authentification
Spring security 3.1 dispose d’un mode
«stateless»
Qui ne fonctionne pas en authentification
par formulaire
Solution : utiliser l’authentification
«Remember Me»
<!> Uniquement en mode «Token»
mercredi 7 mars 12
51. Entité en cours de
modification
Se passer du très utile @SessionAttributes
mercredi 7 mars 12
52. Serveur
1337AZERTYUIOP
pet com.myapp.Pet@566577
GET /pet/573/chimpanzee
POST /pet
mercredi 7 mars 12
53. Serveur
1337AZERTYUIOP
pet com.myapp.Pet@566577
GET /pet/573/chimpanzee
POST /pet
1 - Récupérer l’attribut en session
2 - «Binding» à partir des données du POST
3 - Appel de la méthode du contrôleur
mercredi 7 mars 12
54. Serveur
1337AZERTYUIOP
pet com.myapp.Pet@566577
GET /pet/573/chimpanzee
POST /pet
1 - Récupérer l’attribut en session
1 - Charger l’entité depuis la base de données
2 - «Binding» à partir des données du POST
3 - Appel de la méthode du contrôleur
mercredi 7 mars 12
55. Une solution :
Annoter une méthode avec
@ModelAttribute permet de l’insérer dans
le traitement de la requête avant le
«binding»
Cette méthode peut prendre les même
paramètres qu’une méthode de Contrôleur
mercredi 7 mars 12