Ich habe einen OpenShift Wildfly Server. Ich baue eine Website mit dem Spring MVC
Framework. Eine meiner Webseiten verwendet auch eine WebSocket-Verbindung. Auf der Server-Seite habe ich die @ServerEndpoint
Annotation und die javax.websocket.*
-Bibliothek benutzt, um meinen Websocket zu erstellen:
OpenShift gibt eine Standard-URL, so dass alle meine Webseiten (HTML-Dateien) den gemeinsamen (kanonischen) Hostnamen haben. Der Einfachheit halber nenne ich diese URL URL A
( projectname-domainname.rhclound.com
). Ich habe einen Alias, CNAME, von URL A
erstellt, der URL B
heißt (sagen wir https://www.mywebsite.tech
). URL B
ist sicher, da es die https
hat.
Ich verwende einen JavaScript-Client, um eine Verbindung zum WebSocket über den Pfad /serverendpoint
herzustellen. Der URI, den ich in meiner HTML-Webseitendatei test.html
verwende, lautet wie folgt:
Wenn ich URL A
( projectname-domainname.rhclound.com/test
) öffne, verbindet sich der WebSocket und alles funktioniert einwandfrei. Wenn ich jedoch versuche, mit URL B
( https://mywebsite.tech/test
) eine Verbindung zum Websocket herzustellen, stellt der JavaScript-Client sofort eine Verbindung her und trennt die Verbindung.
Hier ist die Nachricht von der Konsole, die ich erhalte:
Hier ist mein JavaScript-Code, der eine Verbindung zum WebSocket herstellt:
%Vor% Nach einer Menge Debugging und dem Versuch, verschiedene Dinge auszuprobieren, kam ich zu dem Schluss, dass das Problem aufgrund des Spring Framework aufgetreten ist. Das liegt daran, dass Spring Framework
eine Verbindung zum WebSocket herstellen konnte, bevor ich URL B
in mein Projekt einführte, aber nach der Einführung von Spring nicht.
Ich habe auf der Website von spring über die WebSocket-Richtlinie gelesen. Ich bin auf ihre gleichen Herkunftsrichtlinien gestoßen gibt an, dass ein Alias, URL B
, keine Verbindung zum WebSocket herstellen kann, da er nicht den gleichen Ursprung hat wie URL A
. Um dieses Problem zu lösen, habe ich die gleiche Ursprungsrichtlinie deaktiviert mit WebSockets wie in der Dokumentation erwähnt, habe ich den folgenden Code hinzugefügt. Ich dachte, dass dies meinen Fehler beheben würde. Hier ist was ich hinzugefügt habe:
Das Problem wurde jedoch nicht behoben. Daher habe ich meinem ApplicationConfig
which extends WebMvcConfigurerAdapter
:
Das hat auch nicht funktioniert. Dann habe ich das versucht:
%Vor%Das hat auch nicht funktioniert.
Ich habe sogar den var wsURI
im JS-Code folgendermaßen geändert:
%Code%
Dann var wsUri = "wss://" + "www.mywebsite.com" + ":8443" + "/serverendpoint";
Als ich das getan habe, gab mir Google Chrome eine Fehlermeldung, dass der Handshake fehlgeschlagen ist. Jedoch, wenn ich diese URL, var wsUri = "wss://" + "mywebsite.com" + ":8443" + "/serverendpoint";
, habe ich nicht den Fehler, dass der Handshake nicht aufgetreten ist, aber ich bekomme eine Nachricht, dass die Verbindung sofort geöffnet und geschlossen (wie oben gesehen).
Wie kann ich das beheben?
Tags und Links websocket spring-mvc spring-security spring-websocket spring-boot