AngularJSアプリとSpring Bootの間にwebsocket通信を確立しようとすると、次のエラーが表示されます。websocketハンドシェイク中のエラー-予期しない応答コード:2。
これが私のJSコードです。
function run(stateHandler, translationHandler, $websocket) {
stateHandler.initialize();
translationHandler.initialize();
var ws = $websocket.$new('ws://localhost:8080/socket'); // instance of ngWebsocket, handled by $websocket service
ws.$on('$open', function () {
console.log('Oh my gosh, websocket is really open! Fukken awesome!');
});
ws.$on('/topic/notification', function (data) {
console.log('The websocket server has sent the following data:');
console.log(data);
ws.$close();
});
ws.$on('$close', function () {
console.log('Noooooooooou, I want to have more fun with ngWebsocket, damn it!');
});
}
そして、ここに私のJavaコード:
WebsocketConfiguration.Java
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry)
{
stompEndpointRegistry.addEndpoint("/socket")
.setAllowedOrigins("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
}
WebsocketSecurityConfiguration.Java
@Override
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
messages
// message types other than MESSAGE and SUBSCRIBE
.nullDestMatcher().authenticated()
// matches any destination that starts with /rooms/
.simpDestMatchers("/topic/tracker").hasAuthority(AuthoritiesConstants.ADMIN)
.simpDestMatchers("/topic/**").permitAll()
// (i.e. cannot send messages directly to /topic/, /queue/)
// (i.e. cannot subscribe to /topic/messages/* to get messages sent to
// /topic/messages-user<id>)
.simpTypeMatchers(SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE).denyAll()
// catch all
.anyMessage().denyAll();
}
誰もこの問題を修正する方法を知っていますか?
前もって感謝します!
同様の問題があり、chromeプラグイン(シンプルなWebSocketクライアント)を使用してwebsocket接続をテストし、で定義されているws:// localhost:8080/handler /に接続しようとしましたregistry.addEndpoint("/handler").setAllowedOrigins("*").withSockJS();
としてのコードですが、予期しないエラー200が発生しました。chrome拡張機能のクライアント要求文字列に/ websocketを追加して、これを修正しました。 JSファイルで次の行を変更します。
var ws = $websocket.$new('ws://localhost:8080/socket');
に
var ws = $websocket.$new('ws://localhost:8080/socket/websocket');
私がこれを修正した理由を私は知らない、私はランダムにつまずいた、some1がそれをもっと明確にすることができれば、それは本当に素晴らしいだろう:)
これを試すことができますWebsocketConfiguration configuration:
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry)
{
stompEndpointRegistry.addEndpoint("/socket").setAllowedOrigins("*");
stompEndpointRegistry.addEndpoint("/socket").setAllowedOrigins("*").withSockJS();
}
あなたはwebsocketとSockJSの両方の構成を持っていますか?
Spring Boot、WebSocket、Angular私は同じ問題に直面しましたが、これはそれを解決し、my angular stockブロッター
。antMatchers("/ws/myapp", "/http/myaap", "/topic/**", "/app/**").permitAll()
WebSecurityConfigurerAdapterクラス
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/", "/favicon.ico")
.antMatchers("/api/stocks/**")
.permitAll()
.antMatchers("/ws/myapp", "/http/myaap", "/topic/**", "/app/**" )
.permitAll()
.anyRequest()
.authenticated()
.and()
.exceptionHandling()
.authenticationEntryPoint(unauthorizedHandler)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}
}
Angularここで、サービスで使用するURLは次のとおりです。
http://localhost:8080/http/myapp'
ws://localhost:8080/ws/myapp
これが役立つことを願っています