java 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
}
# 1 楼答案
你可以使用访问器。方法而不是访问器。getFirstNativeHeader(密码_头) B因为设置密码时使用默认密码保护密码
# 2 楼答案
当您调用
sha.getLogin()
或sha.getPasscode()
时,Spring正在访问会话数据,但是您的用户在会话上没有经过身份验证,当您发送connect ACK时,您需要截获消息并在会话上对用户进行身份验证看看Spring Security WebSocket Support & Sessions