Maison > Java > javaDidacticiel > Une introduction à l'utilisation de Spring Session et de Redis pour partager des sessions

Une introduction à l'utilisation de Spring Session et de Redis pour partager des sessions

巴扎黑
Libérer: 2017-09-06 09:24:56
original
2067 Les gens l'ont consulté

Cet article vous présente principalement les informations pertinentes sur l'utilisation de Spring, Session et redis pour partager des sessions. L'article le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour les études ou le travail de chacun. , veuillez suivre l'éditeur pour apprendre ensemble.

Préface

Après avoir configuré l'environnement du cluster, un problème que nous devons considérer est de savoir comment gérer les sessions générées par l'accès des utilisateurs.

Il existe de nombreuses façons de traiter les sessions. Pour plus de détails, veuillez consulter le blog précédent republié : 5 stratégies de traitement de sessions dans des environnements cluster/distribués

Ici, nous discutez de la troisième méthode : le partage de session.

Le cluster Redis effectue une réplication maître-esclave et utilise la cohérence éventuelle de la base de données Redis pour stocker les informations de session dans Redis. Lorsque le serveur d'applications constate que la session ne se trouve pas dans la mémoire locale, il la recherche dans la base de données redis. La base de données redis étant une base de données indépendante du serveur d'applications, la session peut être partagée et hautement disponible.

Lacunes :

1. redis nécessite une grande mémoire, sinon la session utilisateur sera effacée du cache.

2. Le cache doit être rafraîchi régulièrement

La structure préliminaire est la suivante :


Cependant, cette structure pose toujours des problèmes. Le maître Redis est un goulot d'étranglement important. Si le maître plante, Redis n'effectuera pas activement le changement de maître et le service de session sera interrompu.

Mais créons d’abord cette structure, puis optimisons-la et modifions-la plus tard.

Spring Boot fournit Spring Session pour compléter le partage de session.

Documentation officielle : http://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html#boot-sample

Créez d'abord un contrôleur simple :


@Controller 
public class UserController { 
 
 @RequestMapping(value="/main", method=RequestMethod.GET) 
 public String main(HttpServletRequest request) { 
 HttpSession session = request.getSession(); 
 String sessionId = (String) session.getAttribute("sessionId"); 
 if (null != sessionId) { // sessionId不为空 
 System.out.println("main sessionId:" + sessionId); 
 return "main"; 
 } else { // sessionId为空 
 return "redirect:/login"; 
 } 
 } 
 
 
 @RequestMapping(value="/login", method=RequestMethod.GET) 
 public String login() { 
 return "login"; 
 } 
 
 @RequestMapping(value="/doLogin", method=RequestMethod.POST) 
 public String doLogin(HttpServletRequest request) { 
 System.out.println("I do real login here"); 
 HttpSession session = request.getSession(); 
 String sessionId = UUID.randomUUID().toString(); 
 session.setAttribute("sessionId", sessionId); 
 System.out.println("login sessionId:" + sessionId); 
 return "redirect:/main"; 
 } 
}
Copier après la connexion

Pour faire simple, il s'agit de simuler le contrôle des autorisations. Si le sessionId existe, accédez. la page d'accueil, sinon passez à la page de connexion.

Alors comment réaliser le partage de session ?

Ajoutez les dépendances suivantes :


<!-- spring session --> 
<dependency> 
 <groupId>org.springframework.session</groupId> 
 <artifactId>spring-session</artifactId> 
 <version>1.3.0.RELEASE</version> 
</dependency> 
<!-- redis --> 
<dependency> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-redis</artifactId> 
</dependency>
Copier après la connexion

Ajouter une classe de configuration :


@EnableRedisHttpSession 
public class HttpSessionConfig { 
 @Bean 
 public JedisConnectionFactory connectionFactory() { 
 return new JedisConnectionFactory(); 
 } 
}
Copier après la connexion

A quoi sert cette classe de configuration ?

Documentation officielle :

La configuration Spring est chargée de créer un filtre de servlet qui remplace l'implémentation de HttpSession par une implémentation soutenue par Spring Session

. En d’autres termes, cette classe de configuration peut créer un filtre qui prend en charge le fonctionnement de Spring Session à la place de HttpSession.

L'annotation @EnableRedisHttpSession crée un Spring Bean avec le nom springSessionRepositoryFilter qui implémente Filter. Le filtre est chargé de remplacer l'implémentation HttpSession qui doit être soutenue par Spring Session. L'annotation Redis.

@EnableRedisHttpSession créera un objet bean de springSessionRepositoryFilter pour implémenter ce filtre. Filter est responsable du remplacement de HttpSession.

En d'autres termes, HttpSession ne joue plus de rôle, mais utilise redis pour faire fonctionner directement la Session via des filtres.

Ajoutez la configuration Redis dans application.properties :


spring.redis.host=localhost 
spring.redis.password= 
spring.redis.port=6379
Copier après la connexion

De cette façon, le partage de session est terminé. N'est-ce pas très simple ? Le code des affaires n’a même pas besoin d’une petite modification.

Vérification :

La base de données Redis est vide au début.

Exécutez le projet :

Après avoir accédé à la page, vous pouvez voir les informations de session dans redis.

Après vous être connecté avec désinvolture :

Entrez dans le principal. Cela signifie que le sessionId existe dans la session en cours.

Nous vérifions les cookies de la page en cours. En d'autres termes, ce cookie a sessionId.


Exécutez un nouveau projet avec le port 8081. Ouvrez un nouvel onglet directement dans le navigateur d'origine. Nous savons que le cookie est partagé à ce moment-là. Visitez localhost:8081/main


Nous avons directement accédé au nouveau projet avec succès ! ! Le même cookie peut être utilisé pour partager des sessions sur différents serveurs Web.

Enfin, j'insiste encore :

L'implémentation de HttpSession est remplacée par Spring Session Operating HttpSession équivaut à l'exploitation des données dans Redis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers numéros
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal