首页 > 解决方案 > SockJS 在握手时没有设置 Bearer 授权令牌

问题描述

我有一个 spring boot + angularjs 应用程序,我将它配置为具有套接字连接。这是我在 angularjs 中的套接字控制器:

function SocketController($timeout, localStorageService) {
        var vm = this;
        var accessToken = localStorageService.get('accessToken');
        var stompClient;

        // i can see valid value of token in console
        console.log(accessToken)

        if (accessToken) {
            var socket = new SockJS('/looping',
                null,
                {
                    transports: ['xhr-streaming'],
                    headers: {'Authorization': 'Bearer ' + accessToken}
                });
            stompClient = Stomp.over(socket);
            stompClient.connect({"X-Authorization": "Bearer " + accessToken}, function (frame) {
                console.log('Connected: ' + frame);

                stompClient.subscribe('/topic/loops', function (message) {
                    console.log(message);
                });
            });
        } else {
            console.log("token expired");
        }

        function sendEvent(loopId, value) {
            if (stompClient != null) {
                stompClient.send("/topic/loops", {}, JSON.stringify({'loopId': new Date(), 'value': 'hey silver'}));
            }
        }

        function disconnect() {
            if (stompClient !== null) {
                stompClient.disconnect();
                stompClient = null;
            }

            console.log("Disconnected");
        }

    }

现在,问题是当我在 firefox devtools 中检查请求标头时,没有设置授权标头,如下所示:

请求和响应标头

我怎么解决这个问题?我是套接字的新手。

更新

当我使用 firefox devtools 编辑请求并Authorization在请求标头中设置标头时,收到带有 200 状态代码的响应,但响应内容在 index.html 的 html 中!

标签: spring-bootwebsocketspring-websocketsockjs

解决方案


推荐阅读