これは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(これも記載されていません)に接続します。だから、私は何が最善であるか分からない。
提案がありますか?
これについてのドキュメントを追加することをおすすめします。初心者にはこれは非常に混乱しています。 – Marc