0

Ich habe ein Grails-Projekt, das Spring-Websockets verwendet. Ich habe den DefaultHandshakeHandler implementiert, um einen zufälligen Prinzipalnamen für jede neue Sitzung zu erstellen, und benutze convertAndSendToUser, um Nachrichten zu senden.defaultHandshakeHandler's detenetUser nicht auf Production Server

Alles funktioniert gut im lokalen Lauf. Ich bin auch in der Lage, die WAR-Datei auf einer AWS EC2 Linux-Instanz mit dem neuesten Tomcat zu implementieren. Die Datei wird ordnungsgemäß implementiert und die Connect- und Disconnect-Ereignisse auf Websockets können korrekt erkannt werden.

Das einzige Problem ist, dass das determineUser von CustomHandshakeHandler bei der Produktion nicht aufgerufen wird. Aus diesem Grund ist mein Principal von StompHeaderAccessor immer null und der Code fängt an, NPEs zu spucken.

Dies ist, wie ich den CustomHandshakeHandler erklärt habe:

class CustomHandshakeHandler extends DefaultHandshakeHandler { 
    @Override 
    protected Principal determineUser(ServerHttpRequest request, 
             WebSocketHandler wsHandler, 
             Map<String, Object> attributes) { 
     // Generate principal with UUID as name 
     return new StompPrincipal(UUID.randomUUID().toString()) 
    } 
} 

Dies ist, wie ich die Handshake-Handler-Konfiguration eingestellt:

@Override 
void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) { 
    stompEndpointRegistry.addEndpoint("/ws-ep") // Set websocket endpoint to connect to 
         .setHandshakeHandler(new CustomHandshakeHandler()) // Set custom handshake handler 
         .withSockJS() // Add Sock JS support for frontend 
} 

ich auf lokalen Tomcat 8 und es die gleiche IST-Datei versucht, die Bereitstellung von funktioniert wieder gut. Es scheint, dass das Problem durch AWS verursacht wird. Ich suchte auch nach anderen AWS- und Websocket-Problemen. Ich kam in einigen ELB Verträglichkeit Dinge, aber ich glaube nicht, dass mein Fall ist, da meine WebSockets arbeiten gut (Events empfangen)

Kann jemand bitte helfen oder mir zeigen in die richtige Richtung

+1

Möglicherweise ist das Problem mit einem Port, auf dem Sie den Web-Socket ausführen, überprüfen, dass der Port geöffnet ist und alle Berechtigungen (eingehende/ausgehende) von AWS-Dashboard haben. –

+0

Danke für den Kommentar, aber das Problem war mit den Nginx-Einstellungen –

Antwort

Verwandte Themen