Springboot Websocket Stomp использовать sockjs отправить запрос и получить HTTP ОШИБКА 405 - PullRequest
0 голосов
/ 11 октября 2018

Я использовал springboot-websocket и spring-stomp для создания приложения webscoket, а sockjs отправлял запрос websocket, но получаю ошибку, подобную этой:

Failed to load http://192.168.0.118:8090/endpointWisely/info?t=1539219338972: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.0.118:8099' is therefore not allowed access. The response had HTTP status code 405.

html-код здесь:

function connect() {
    var socket = new SockJS('http://192.168.0.118:8090/endpointWisely'); //链接SockJS 的endpoint 名称为"/endpointWisely"

    stompClient = Stomp.over(socket);//使用stomp子协议的WebSocket 客户端

    var headers = {
        'authorization':'bearer;eyJ0eXBlIjoiand0VG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJ4LXRlbmFudC1pZCI6MTE5NjU2MzE5Nzk5ODA4LCJ4LXVzZXItaWQiOiIxMTk2NTYzMjE2MTAyNDAiLCJpc3MiOiJhcGl1c2VyIiwiYXVkIjoiMTUyMzQ5NjY4MzMzOSIsImV4cCI6MTUzODIzNjc3OCwibmJmIjoxNTM4MTg2NzEzfQ.hjA9_WwplrCsYsTEYJXRBJI5e5OZzX4-NzDXuaBo8VQ'
    };

    stompClient.connect(
        headers,  // 参数
        function(frame) {//链接Web Socket的服务端。 connectCallback
            setConnected(true);
            console.log('Connected: ' + frame);
            stompClient.subscribe('/queue/119656321610240/message', function(respnose){ //订阅/topic/getResponse 目标发送的消息。这个是在控制器的@SendTo中定义的。
                console.log('message: ' + JSON.parse(respnose.body));
                showResponse(JSON.parse(respnose.body));
            });
        }
    );
}

Я прочитал документы Spring, он сказал, что нужно добавить конфигурацию CORS, и я сделал:

@Bean
public FilterRegistrationBean corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("OPTIONS");
    config.addAllowedMethod("HEAD");
    config.addAllowedMethod("GET");
    config.addAllowedMethod("PUT");
    config.addAllowedMethod("POST");
    config.addAllowedMethod("DELETE");
    config.addAllowedMethod("PATCH");
    source.registerCorsConfiguration("/**", config);
    final FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
    bean.setOrder(0);
    return bean;
}

@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
    // 客户端与服务器端建立连接的点
    stompEndpointRegistry.addEndpoint("/endpointWisely")
            .setAllowedOrigins("*")
            //.setHandshakeHandler(createMyHandShakeHandler())
            .withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry messageBrokerRegistry) {
    messageBrokerRegistry.enableSimpleBroker("/queue", "/topic");
    messageBrokerRegistry.setApplicationDestinationPrefixes("/app");
    // registry.setUserDestinationPrefix("/user/");
}

Я делаю все это, но все равно получаю ошибку 405. Нужна помощь!спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...