Проблемы с CORS со Springboot и Angular Websocket - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть два сервиса для создания приложения Spring Boot

Но у меня всегда были такие проблемы с CORS, как это

Access to XMLHttpRequest at '.../websocket-cr/info?t=1581585481804' from origin'http://localhost:8080' 
has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin'
header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. 
The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials.

Сервис Springboot на 8082

    public void registerStompEndpoints(StompEndpointRegistry registry) {
       registry.addEndpoint("/websocketcr").
       setAllowedOrigins("http://localhost:8080").withSockJS();
    }

Angular служба на 8080

    var socket = new SockJS('http://localhost:8080/websocket-cr');
    //socket.withCredentials = true ;
    stompClient = Stomp.over(socket);

Я пытался

    setAllowedOrigins("http://localhost:8080").withSockJS();
    setAllowedOrigins("*").withSockJS();

или использовать CORS Anywhere в javascript

    var socket = new SockJS('http://cors-anywhere.herokuapp.com/http://localhost:8082/websocket-cr');
    socket.withCredentials = true ;

и как лучше всего сделать, чтобы

я сделал angular прокси для моего внутреннего сервера?

или все в порядке setAllowedOrigins ( 'хост: порт')

Ответы [ 3 ]

0 голосов
/ 13 февраля 2020

Просто добавьте аннотацию @ CrossOrigin поверх класса. Это отлично работает. Например:

@RestController
@CrossOrigin(origins = "*")
public class YourController {
    .....
}
0 голосов
/ 18 марта 2020

Извините за опоздание на эту вечеринку. Я использую здесь STOMP JS в angular 8 с springboot рабочей демонстрацией , вам нужно добавить WebSocketConfig класс для настройки вещей для Socket и For контроллера отдельно, если вам это нужно.

Конфигурационный класс

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws")
        .setAllowedOrigins("*")
        //.setAllowedOrigins("http://localhost:4200").setAllowedOrigins("http://localhost:8081")
        .withSockJS();
    }
}

ref Другая помощь от сотрудников Spring

In Класс контроллера просто добавьте

@Controller
@CrossOrigin(origins = "*")
public class LogsController {
..
}

И ответ будет обновляться для аутентификации / авторизации рано и поздно.

0 голосов
/ 13 февраля 2020

В вашем основном классе службы SpringBoot введите нижеприведенный компонент, он будет работать

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer () {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE").allowedHeaders("*")
                    .allowedOrigins("*");
        }
    };
}
...