猿问

Spring WebSocket StompHeaderAccessor

如果我执行以下代码,sha.getLogin()并sha.getPasscode()输出null!代码有什么问题?


客户:


var socket = new SockJS('/ws');

stompClient = Stomp.over(socket);

stompClient.connect("123","456", function (frame) {

    //...

});

服务器:


@EventListener

private void onSessionConnect(SessionConnectedEvent event)

{

    StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage());


    System.out.println(sha.getLogin());

    System.out.println(sha.getPasscode());

}

但是,如果执行以下命令,则包含登录名和密码。


sha.getMessageHeaders().toString()

输出(无json):


{  

    simpMessageType=CONNECT_ACK,

    simpConnectMessage=GenericMessage[  

        payload=byte[0],

        headers={  

            simpMessageType=CONNECT,

            stompCommand=CONNECT,

            nativeHeaders={  

                login=[123],//<<<Login

                passcode=[PROTECTED],//<<<Passcode

                accept-version=[  

                    1.1,

                    1.0

                ],

                heart-beat=[  

                    10000,

                    10000

                ]

            },

            simpSessionAttributes={},

            simpHeartbeat=[J@4b5cea63,

            stompCredentials=[PROTECTED],

            simpSessionId=xhojby2n

        }

    ],

    simpSessionId=xhojby2n

}


潇湘沐
浏览 749回答 1
1回答

函数式编程

当您调用时,Spring正在访问会话数据;sha.getLogin()或者sha.getPasscode(),您的用户未在会话中进行身份验证;当您发送连接ACK时,您需要拦截消息并在会话中对用户进行身份验证。
随时随地看视频慕课网APP

相关分类

Java
我要回答