


Comment résoudre le problème selon lequel le paramètre de délai d'expiration de la session Springboot2 n'est pas valide
Problème :
Aujourd'hui, nous avons rencontré un problème de délai d'expiration dans le projet. Les modifications de application.properties dans SpringBoot2 n'ont jamais pris effet.
Solution :
Le conteneur intégré utilisé par Spring Boot est contrôlé par les propriétés du serveur.*. Spring Boot créera une instance du conteneur de servlet à l'aide de l'une des instances ServletWebServerFactory. Ces classes utilisent les attributs server.* pour configurer les conteneurs de servlets gérés (tels que Tomcat, Jetty, etc.).
Lorsque l'application est packagée dans un fichier war et déployée sur une instance Tomcat, les attributs server.* ne peuvent pas être utilisés. Celles-ci ne s'appliquent pas car le conteneur de servlet prédéfini peut être utilisé (puisque le service s'exécute à distance). Par conséquent, le déploiement sur un Tomcat distant rendra les propriétés server.* inutiles.
1. Modifiez le fichier de configuration en fonction de la publication sur Internet (s'il est démarré par Jar, il prendra effet), comme suit :
server: servlet: session: timeout: PT1H # 1小时过期 cookie: max-age: PT1H # 1小时过期
Remarque : PT1H signifie définir le délai d'expiration de la session sur 1 heure. .
Extension : Duration
Découvrez la méthode setTimeouot en consultant le code source de springboot Ici, l'instance de Duration doit être transmise dans
public void setTimeout(Duration timeout) { this.timeout = timeout; }
Duration est nouvellement ajoutée dans Java8 et est principalement utilisée pour calculer la différence de date. est déclaré final et est thread-safe.
Si vous convertissez une chaîne, cela est similaire à la méthode de formatage de date de SimpleDateFormat
Duration. Les chaînes sont similaires aux nombres, qui sont positifs et négatifs : la valeur par défaut est positive, le négatif commence par "-", suivi de "PT". ', et la lettre de temps ci-dessous :
'D' - Jours
'H' - Heures
'M' - Minutes
'S' - Secondes
Chaque unité doit commencer par un nombre, et l'ordre des heures, minutes et secondes ne peut pas être gâché, par exemple : PT2H3M2S est égal à -PT-2H-3M-2S.
2. Définissez le délai d'expiration de la session de tomcat
1) Dans le répertoire conf de tomcat, changez servler.xml :
<Context path="/abtest" docBase="/abtest" defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/>
2) Changez web.xml dans le projet :
<session-config> <session-timeout>20</session-timeout> </session-config>
3) Changez
session.setMaxInactiveInterval(30*60);
dans le programme Lorsque vous rencontrez le même problème, veuillez lire les lettres rouges ci-dessus et résoudre le problème dans l'ordre.
Code de test :
@RestController @RequestMapping("/valid-time") public class TestController { @GetMapping("/test") public String validTime(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); int sessionTime = session.getMaxInactiveInterval(); return new StringBuilder("sessionTime=").append(sessionTime).toString(); } }
La désynchronisation du temps entraîne un énorme piège en cas d'échec de la session Spring
La désynchronisation du temps du serveur Linux entraîne un énorme piège en cas d'échec de la session Spring
En raison des besoins de l'entreprise , l'environnement autonome d'origine a été converti en un environnement clusterisé, afin de ne pas modifier la tâche, spring session + redis a été choisi comme solution de partage de session.
Après avoir confirmé la solution technique, j'ai recherché de nombreuses informations sur la session de printemps sur Internet. Après l'avoir lu et n'avoir trouvé aucune erreur de la part des personnes précédentes, j'ai commencé à travailler dessus.
Le processus d'installation de Redis est ignoré.
Ajoutez une session Spring au projet étape par étape en fonction des informations. Le projet à nœud unique s'est exécuté avec succès sans aucune erreur et la session a été écrite avec succès sur Redis.
Ensuite, par souci de sécurité, j'ai installé nginx sur mon ordinateur et déployé 3 tomcats. Tout semblait parfait, et le partage de session s'est effectué entre plusieurs nœuds.
Tous les préparatifs préliminaires sont terminés jusqu'à présent, il ne reste que la dernière étape.
Le cauchemar commence...
Déployez tous les nœuds en ligne, puis ouvrez le navigateur pour accéder avec succès à l'application. Bien sûr, nous ne pouvons pas nous contenter de voir la page terminée, nous devons quand même nous connecter, donc. ...
Puis...
J'ai saisi le mot de passe utilisateur d'innombrables fois, indiquant que la connexion a réussi, mais le résultat final était toujours rejeté, o(╥﹏╥)o
La prochaine étape est d'innombrables voyages pour remplir les fosses
Regardez le journal... ...
Regardez diverses demandes...
Je soupçonne qu'il y a un BUG dans la session de printemps...
J'ai même allumé la télécommande Débogage en mode DEBUG, et j'ai finalement vu dans le mode DEBUG universel que lorsque la session de printemps obtientSession, si la session est obtenue,Tout d'abord, il sera jugé si la session a expiré. La méthode de comparaison est également très simple, ce qui est le cas. pour obtenir l'heure actuelle du système et la comparer avec l'heure d'expiration de la session. Si l'heure actuelle est inférieure à l'heure d'expiration, cela signifie que la session n'a pas expiré. En voyant cela, j'ai immédiatement ressenti un sentiment d'illumination, et le petit univers a finalement éclaté ici.
Nima—> Toutes les sessions acquises ont expiré, et puis... puis... bien sûr, j'ai couru précipitamment pour vérifier l'heure du serveur, alors... j'ai pleuré o(╥﹏╥)o, il s'avère c'est toi qui m'as trompé. Je...
Pour commémorer ce pit trip, je publie cet article
De plus, j'enregistrerai la synchronisation de l'heure du serveur Linux
commande date :
date : Afficher l'heure actuelle, les résultats sont les suivants : Mar 4 mars 01:36:45 CST 2017
date -s 09:38:40 : Réglez l'heure actuelle, le résultat est le suivant : Mar 4 mars 09:38 : 40 Commande CST 2017
ntpdate:
NTPDate -u ntp. Shanghai) : ntp.api.bz
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

1. Redis implémente le principe du verrouillage distribué et pourquoi les verrous distribués sont nécessaires. Avant de parler de verrous distribués, il est nécessaire d'expliquer pourquoi les verrous distribués sont nécessaires. Le contraire des verrous distribués est le verrouillage autonome. Lorsque nous écrivons des programmes multithreads, nous évitons les problèmes de données causés par l'utilisation d'une variable partagée en même temps. Nous utilisons généralement un verrou pour exclure mutuellement les variables partagées afin de garantir l'exactitude de celles-ci. les variables partagées. Son champ d’utilisation est dans le même processus. S’il existe plusieurs processus qui doivent exploiter une ressource partagée en même temps, comment peuvent-ils s’exclure mutuellement ? Les applications métier d'aujourd'hui sont généralement une architecture de microservices, ce qui signifie également qu'une application déploiera plusieurs processus si plusieurs processus doivent modifier la même ligne d'enregistrements dans MySQL, afin d'éviter les données sales causées par des opérations dans le désordre, les besoins de distribution. à introduire à ce moment-là. Le style est verrouillé. Vous voulez marquer des points

L'échec de la session est généralement dû à l'expiration de la durée de vie de la session ou à l'arrêt du serveur. Les solutions : 1. Prolonger la durée de vie de la session ; 2. Utiliser le stockage persistant ; 3. Utiliser les cookies ; 4. Mettre à jour la session de manière asynchrone ; 5. Utiliser un middleware de gestion de session ;

Springboot lit le fichier, mais ne peut pas accéder au dernier développement après l'avoir empaqueté dans un package jar. Il existe une situation dans laquelle Springboot ne peut pas lire le fichier après l'avoir empaqueté dans un package jar. La raison en est qu'après l'empaquetage, le chemin virtuel du fichier. n’est pas valide et n’est accessible que via le flux Read. Le fichier se trouve sous les ressources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

Solution au problème inter-domaines de PHPSession Dans le développement de la séparation front-end et back-end, les requêtes inter-domaines sont devenues la norme. Lorsque nous traitons de problèmes interdomaines, nous impliquons généralement l'utilisation et la gestion de sessions. Cependant, en raison des restrictions de la politique d'origine du navigateur, les sessions ne peuvent pas être partagées par défaut entre les domaines. Afin de résoudre ce problème, nous devons utiliser certaines techniques et méthodes pour réaliser le partage de sessions entre domaines. 1. L'utilisation la plus courante des cookies pour partager des sessions entre domaines

SpringBoot et SpringMVC sont tous deux des frameworks couramment utilisés dans le développement Java, mais il existe des différences évidentes entre eux. Cet article explorera les fonctionnalités et les utilisations de ces deux frameworks et comparera leurs différences. Tout d’abord, découvrons SpringBoot. SpringBoot a été développé par l'équipe Pivotal pour simplifier la création et le déploiement d'applications basées sur le framework Spring. Il fournit un moyen rapide et léger de créer des fichiers exécutables autonomes.

1. Personnalisez RedisTemplate1.1, mécanisme de sérialisation par défaut RedisAPI. L'implémentation du cache Redis basée sur l'API utilise le modèle RedisTemplate pour les opérations de mise en cache des données. Ici, ouvrez la classe RedisTemplate et affichez les informations sur le code source de la classe. Déclarer la clé, diverses méthodes de sérialisation de la valeur, la valeur initiale est vide @NullableprivateRedisSe

Dans les projets, certaines informations de configuration sont souvent nécessaires. Ces informations peuvent avoir des configurations différentes dans l'environnement de test et dans l'environnement de production, et peuvent devoir être modifiées ultérieurement en fonction des conditions commerciales réelles. Nous ne pouvons pas coder en dur ces configurations dans le code. Il est préférable de les écrire dans le fichier de configuration. Par exemple, vous pouvez écrire ces informations dans le fichier application.yml. Alors, comment obtenir ou utiliser cette adresse dans le code ? Il existe 2 méthodes. Méthode 1 : Nous pouvons obtenir la valeur correspondant à la clé dans le fichier de configuration (application.yml) via le ${key} annoté avec @Value. Cette méthode convient aux situations où il y a relativement peu de microservices. Méthode 2 : En réalité. projets, Quand les affaires sont compliquées, la logique

Cet article écrira un exemple détaillé pour parler du développement réel de dubbo+nacos+Spring Boot. Cet article ne couvrira pas trop de connaissances théoriques, mais écrira l'exemple le plus simple pour illustrer comment dubbo peut être intégré à nacos pour créer rapidement un environnement de développement.
