Table des matières
Problème : 
Solution :
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 :
2. Définissez le délai d'expiration de la session de tomcat
La désynchronisation du temps entraîne un énorme piège en cas d'échec de la session Spring
De plus, j'enregistrerai la synchronisation de l'heure du serveur Linux
Maison Java javaDidacticiel Comment résoudre le problème selon lequel le paramètre de délai d'expiration de la session Springboot2 n'est pas valide

Comment résoudre le problème selon lequel le paramètre de délai d'expiration de la session Springboot2 n'est pas valide

May 22, 2023 pm 01:49 PM
session springboot

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小时过期
Copier après la connexion

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;
    }
Copier après la connexion

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"/>
Copier après la connexion

2) Changez web.xml dans le projet :

<session-config>  
    <session-timeout>20</session-timeout>  
</session-config>
Copier après la connexion

3) Changez

session.setMaxInactiveInterval(30*60);
Copier après la connexion

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();
    }
}
Copier après la connexion

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment utiliser Redis pour implémenter des verrous distribués dans SpringBoot Comment utiliser Redis pour implémenter des verrous distribués dans SpringBoot Jun 03, 2023 am 08:16 AM

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

Comment résoudre l'échec de la session Comment résoudre l'échec de la session Oct 18, 2023 pm 05:19 PM

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 ;

Comment résoudre le problème selon lequel Springboot ne peut pas accéder au fichier après l'avoir lu dans un package jar Comment résoudre le problème selon lequel Springboot ne peut pas accéder au fichier après l'avoir lu dans un package jar Jun 03, 2023 pm 04:38 PM

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 session PHP Solution au problème inter-domaines de session PHP Oct 12, 2023 pm 03:00 PM

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

Comparaison et analyse des différences entre SpringBoot et SpringMVC Comparaison et analyse des différences entre SpringBoot et SpringMVC Dec 29, 2023 am 11:02 AM

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.

Comment SpringBoot personnalise Redis pour implémenter la sérialisation du cache Comment SpringBoot personnalise Redis pour implémenter la sérialisation du cache Jun 03, 2023 am 11:32 AM

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

Comment obtenir la valeur dans application.yml au Springboot Comment obtenir la valeur dans application.yml au Springboot Jun 03, 2023 pm 06:43 PM

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

Tutoriel pratique de développement SpringBoot+Dubbo+Nacos Tutoriel pratique de développement SpringBoot+Dubbo+Nacos Aug 15, 2023 pm 04:49 PM

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.

See all articles