Websocket连接上的“访问控制允许来源”错误

时间:2019-10-22 07:19:40

标签: java spring-websocket stomp sockjs

我正在尝试从其他域连接到我的websocket。 服务器位于localhost:8098上,客户端位于localhost:8080上。 每次尝试连接时,都会出现“ Access-Control-Allow-Origin”错误,同时还添加了.setAllowedOrigins("*")

不确定缺少什么。

服务器

@Configuration
@EnableWebSocketMessageBroker
public class webSocketObjects implements WebSocketMessageBrokerConfigurer {

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

    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws/Object").setAllowedOrigins("*").withSockJS();


    }

客户端

<script>
    let stompClient=null;
    import Stomp from 'stompjs';
    import SockJS from 'sockjs-client'
    export default {
        name: "modal",
        props: ['node'],
        data() {
            return{
                bacnetObject: '',
                status: "disconnected"


        }
        },
        mounted() {
            this.bacnetObject = this.node;
        },
        methods: {
            connect: function(){
                const socket = new SockJS('http://localhost:8098/ws/Object');
                stompClient = Stomp.over(socket);
                stompClient.connect({
                }, function (frame) {
                    console.log('Connected: ' + frame);
                    stompClient.subscribe('/topic/user', console.log(String.body))

                })
    },
            disconnect: function () {
                stompClient.disconnect();
            }
    }
    }
</script>

我得到的错误:

CORS策略已阻止从来源“ http://localhost:8098/ws/Object/info?t=1571728150435”访问“ http://localhost:8080”处的XMLHttpRequest:请求的资源上没有“ Access-Control-Allow-Origin”标头。

1 个答案:

答案 0 :(得分:0)

如果您使用凭据,则根据MDN上的文档,*将不起作用。尝试指定主机。

  

对于没有凭据的请求,可以将字面值“ *”指定为通配符;该值告诉浏览器允许从任何来源请求代码来访问资源。尝试将通配符与凭据一起使用将导致错误。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

另一方面,有时视情况而定,您可能需要注意这些标头

Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: header1, header2 ...

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Preflighted_requests