2016-06-13 10 views
2

これはSpringのドキュメントには記載されていませんが、WebSocket接続は接続のアップグレード応答(101ステータス)につながるはずです。Spring SockJs RequestHandlerは接続を101にアップグレードしません

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig<S extends ExpiringSession> extends AbstractSessionWebSocketMessageBrokerConfigurer<S>{ 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/topic", "/queue"); 

     config.setApplicationDestinationPrefixes("/mobile-server"); 

     config.setUserDestinationPrefix("/mobile-user"); 

    } 

    @Override 
    public void configureStompEndpoints(StompEndpointRegistry registry) { 
     registry 
      .addEndpoint("/ws") 
      .setHandshakeHandler(new DefaultHandshakeHandler(new TomcatRequestUpgradeStrategy())) 
      .setAllowedOrigins("*") 
      .withSockJS() 
      .setSessionCookieNeeded(false) 
      ; 
    } 

} 

しかし、私は設定を変更すると私の知る限り

@Configuration 
public class WebSocketSecurity extends AbstractSecurityWebSocketMessageBrokerConfigurer{ 

@Override 
protected boolean sameOriginDisabled() { 
    return true; 
} 

    @Override 
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) { 
     messages 
     .nullDestMatcher().permitAll() 
     .simpSubscribeDestMatchers("/user/queue/errors").permitAll() 
     .simpDestMatchers("/mobile-server/**").hasRole("ENDUSER") 
     .simpSubscribeDestMatchers("/user/**", "/topic/**").hasRole("ENDUSER") 
     .anyMessage().denyAll(); 
    } 
} 

をアップグレードを生成するWebSocketHttpRequestHandlerの代わりにTransportHandlingSockJsServiceによって生成される「ようこそSockJSへ」メッセージで200のステータスを取得〜

@Override 
public void configureStompEndpoints(StompEndpointRegistry registry) { 
    registry 
     .addEndpoint("/ws") 
     .setHandshakeHandler(new DefaultHandshakeHandler(new TomcatRequestUpgradeStrategy())) 
     .setAllowedOrigins("*"); 
} 

私の驚いたことに、/ wsの呼び出しは、接続のアップグレード101につながります。ドキュメントとすべての例一様にwithSockJS()とwebsocket接続の開始AFAIKはリクエストのアップグレードです。

アップグレードを強制するには、/ ws/websocket(これも記載されていません)に接続します。だから、私は何が最善であるか分からない。

提案がありますか?

答えて

1

これは予期した動作です。 SockJSプロトコルの仕組みは、 http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.htmlです。最初の「挨拶」リクエストがあり、クライアントは一度に1つのトランスポートの試行を開始します。

+0

これについてのドキュメントを追加することをおすすめします。初心者にはこれは非常に混乱しています。 – Marc

関連する問題