recherche
MaisonJavajavaDidacticielLors du développement d'un serveur WebSocket à l'aide de NetTy4, comment vous assurez-vous que le navigateur reconnaît correctement la réponse 401?

Lors du développement d'un serveur WebSocket à l'aide de NetTy4, comment vous assurez-vous que le navigateur reconnaît correctement la réponse 401?

NetTy4 WebSocket Server: Gérez correctement les réponses du navigateur 401

Lors du développement de serveurs WebSocket à l'aide de NetTy4, il est souvent nécessaire de vérifier le jeton client. Si la vérification échoue, le serveur doit renvoyer le code d'état 401 et fermer la connexion. Cependant, les navigateurs ne parviennent parfois pas à recevoir cette réponse correctement. Cet article expliquera en détail comment résoudre ce problème.

Question: Utilisez var socket = new WebSocket("ws://127.0.0.1:18080/ws?token=xxxx"); Pour se connecter au serveur et le serveur vérifie le jeton. En cas de défaillance, le serveur renvoie 401 et ferme la connexion, mais le navigateur ne reçoit pas de réponse 401. L'extrait de code serveur est le suivant:

 private void httpResponse401 (ChannelHandlerContext ctx, fullhttprequest request) {
    FullHttpResponse Response = new DefaultfullHttpResponse (request.protoColVersion (), httpResponSestatus.unAuthorized);
    réponse.Headers (). set (httpheadernames.content_length, 0);
    ctx.writeAndFlush (Response) .AddListener (ChannelfUTUreListener.close);
    REFORENCECOUNTUTIL.Release (demande);
}

Cause: Le problème réside dans l'étape de la poignée de main WebSocket. La demande de poignée de main est une demande HTTP, mais une fois la poignée de main qui réussit, la communication n'est plus un protocole HTTP. Par conséquent, la réponse 401 doit être retournée dans la phase de poignée de main.

Solution: Vérifiez le jeton dans le code qui gère la demande de poignée de main WebSocket. Si la vérification échoue, la réponse 401 est directement renvoyée et la logique d'établissement de connexion WebSocket n'est pas exécutée.

Exemple de code amélioré:

 @Outrepasser
public void ChannelRead (ChannelHandlerContext CTX, objet msg) lève une exception {
    if (msg instanceof fullHttpRequest) {
        FullHttpRequest request = (fullHttpRequest) msg;
        String token = extractTokenFromRequest (request); // Extraire la fonction d'assistance du jeton if (! ValidateToken (jeton)) {
            HTTPRESPONSE401 (CTX, demande);
            retour;
        }

        // La vérification des jetons est passée, continuez WebSocket Handshake WebSocketServerHandshakerFactory WSFactory = new WebSocketServerHandshakerFactory (
                getwebsocketLocation (demande), null, false);
        WebSocketServerHandshaker Handshaker = wsfactory.newhandshaker (demande);
        if (handshaker == null) {
            WebsocketServerHandshakerFactory.SendUnSupportEdVersionResponse (ctx.Channel ());
        } autre {
            Handshaker.Handshake (ctx.Channel (), demande);
        }
    } else if (msg instanceof websocketframe) {
        // traite les cadres WebSocket}
}

chaîne privée ExtractTokenFromRequest (requête fullHttpRequest) {
    String uri = request.uri ();
    String [] parties = uri.split ("\\?");
    if (part.length> 1) {
        String [] params = parties [1] .split ("&");
        pour (String Param: params) {
            String [] keyValue = param.split ("=");
            if (keyvalue.length == 2 && keyvalue [0] .equals ("token")) {
                return keyValue [1];
            }
        }
    }
    retourner null;
}


Boolean ValidateToken privé (jeton de chaîne) {
    // Implémentez la logique de vérification du jet // Exemple, remplacez par la logique de vérification réelle}

private void httpResponse401 (ChannelHandlerContext ctx, fullhttprequest request) {
    FullHttpResponse Response = new defaultullHttpResponse (
            Httpversion.http_1_1, httpResponsestatus.unAuthorized);
    réponse.Headers (). Set (httpheadernames.content_type, "text / plain; charset = utf-8");
    Response.Headers (). Set (httpheadernames.content_length, réponse.Content (). ReadableBytes ());
    ctx.writeAndFlush (Response) .AddListener (ChannelfUTUreListener.close);
    REFORENCECOUNTUTIL.Release (demande);
}

En effectuant une vérification des jetons pendant la phase de poignée de main et en renvoyant une réponse 401, le navigateur peut identifier correctement la raison de la fermeture de la connexion, permettant ainsi un serveur WebSocket plus robuste. extractTokenFromRequest améliore la robustesse de l'extraction de jetons. Veuillez remplacer token dans l'exemple par votre logique de vérification réelle.

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
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
Comment le sous-système de chargeur de classe du JVM contribue-t-il à l'indépendance de la plate-forme?Comment le sous-système de chargeur de classe du JVM contribue-t-il à l'indépendance de la plate-forme?Apr 23, 2025 am 12:14 AM

Le chargeur de classe garantit la cohérence et la compatibilité des programmes Java sur différentes plates-formes via le format de fichier de classe unifié, le chargement dynamique, le modèle de délégation parent et les bytecode indépendants de la plate-forme et réalisent l'indépendance de la plate-forme.

Le compilateur Java produit-il un code spécifique à la plate-forme? Expliquer.Le compilateur Java produit-il un code spécifique à la plate-forme? Expliquer.Apr 23, 2025 am 12:09 AM

Le code généré par le compilateur Java est indépendant de la plate-forme, mais le code finalement exécuté est spécifique à la plate-forme. 1. Le code source Java est compilé en bytecode indépendant de la plate-forme. 2. Le JVM convertit le bytecode en code machine pour une plate-forme spécifique, garantissant un fonctionnement multiplateforme mais les performances peuvent être différentes.

Comment le JVM gère-t-il le multithreading sur différents systèmes d'exploitation?Comment le JVM gère-t-il le multithreading sur différents systèmes d'exploitation?Apr 23, 2025 am 12:07 AM

Le multithreading est important dans la programmation moderne car elle peut améliorer la réactivité du programme et l'utilisation des ressources et gérer des tâches simultanées complexes. JVM assure la cohérence et l'efficacité des multitheads sur différents systèmes d'exploitation grâce à la cartographie des filetages, au mécanisme de planification et au mécanisme de verrouillage de synchronisation.

Que signifie «l'indépendance de la plate-forme» dans le contexte de Java?Que signifie «l'indépendance de la plate-forme» dans le contexte de Java?Apr 23, 2025 am 12:05 AM

L'indépendance de la plate-forme de Java signifie que le code écrit peut fonctionner sur n'importe quelle plate-forme avec JVM installé sans modification. 1) Le code source Java est compilé en bytecode, 2) ByteCode est interprété et exécuté par le JVM, 3) le JVM fournit des fonctions de gestion de la mémoire et de collecte des ordures pour s'assurer que le programme s'exécute sur différents systèmes d'exploitation.

Les applications Java peuvent-elles encore rencontrer des bogues ou des problèmes spécifiques à la plate-forme?Les applications Java peuvent-elles encore rencontrer des bogues ou des problèmes spécifiques à la plate-forme?Apr 23, 2025 am 12:03 AM

JavaApplicationsCanindeenCounterPlatform-spécificiSUesSuSesSetheTethejvm'sabstraction.reasonsinclude: 1) nativecode et libraires, 2) OperatingSystemdifferences, 3) jvmimplementationvariations, et4) condason

Comment le cloud computing a-t-il un impact sur l'importance de l'indépendance de la plate-forme de Java?Comment le cloud computing a-t-il un impact sur l'importance de l'indépendance de la plate-forme de Java?Apr 22, 2025 pm 07:05 PM

Le cloud computing améliore considérablement l'indépendance de la plate-forme de Java. 1) Le code Java est compilé en bytecode et exécuté par le JVM sur différents systèmes d'exploitation pour assurer le fonctionnement multiplateforme. 2) Utilisez Docker et Kubernetes pour déployer des applications Java pour améliorer la portabilité et l'évolutivité.

Quel rôle la plate-forme de Java a-t-elle joué dans son adoption généralisée?Quel rôle la plate-forme de Java a-t-elle joué dans son adoption généralisée?Apr 22, 2025 pm 06:53 PM

Java'splatformIndependenceNallowsDeveloperstowRiteCodeoncerandUnitonanyDeviceoroswithajvm. ThisisachievedthroughPulingToBytecode, quithejvMinterpretsorcompimentsAtruntime.ThisfeureHassignifant Boosttedjava'sadoptionDuetocross-PlatformDoyment, SplateFor, SplateformDoyment, sadoptionDuetocross-PlatformDoyment, Sendjava'sadoptionDuetocross-PlatformDoyment, Sendjava'sadoptionDuetocross-PlatformDoyment, Sendjava'sadoptionDuetocross-PlatformDoyment, SADOPtiondUtocross-PlatformDoyment, SADOPtiondUetocross-PlatformDoyment.

Comment les technologies de contenerisation (comme Docker) affectent-elles l'importance de l'indépendance de la plate-forme de Java?Comment les technologies de contenerisation (comme Docker) affectent-elles l'importance de l'indépendance de la plate-forme de Java?Apr 22, 2025 pm 06:49 PM

Les technologies de conteneurisation telles que Docker améliorent plutôt que de remplacer l'indépendance de la plate-forme de Java. 1) Assurer la cohérence entre les environnements, 2) Gérer les dépendances, y compris des versions JVM spécifiques, 3) Simplifier le processus de déploiement pour rendre les applications Java plus adaptables et gérables.

See all articles

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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

SublimeText3 version Mac

SublimeText3 version Mac

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

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles