


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!

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 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.

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.

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.

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

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é.

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.

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.


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

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 !

Article chaud

Outils chauds

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

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
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

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
Outils de développement JavaScript utiles