Vert.x SockJS套接字“.webUser()”始终为空
我遵循Vert.x 4,注意到我的处理程序中的每个Vert.x SockJS套接字“.webUser()”始终为空,vert.x,sockjs,vertx-verticle,vertx-eventbus,Vert.x,Sockjs,Vertx Verticle,Vertx Eventbus,我遵循Vert.x 4,注意到我的处理程序中的每个SockJSSocket都有一个.webSession()和一个.webUser()。但是,除了.webSession().id() 我在该套接字处理程序所在的子路由器上注册了一个AuthHandler,但我前端的SockJS客户端无法在HTTP升级请求中发送凭据 如何填充这些字段以供使用?我使用以下直接代码来保持类似会话的信息可用: class SockJSBridge implements Handler<BridgeEvent>
SockJSSocket
都有一个.webSession()
和一个.webUser()
。但是,除了.webSession().id()
我在该套接字处理程序所在的子路由器上注册了一个AuthHandler,但我前端的SockJS客户端无法在HTTP升级请求中发送凭据
如何填充这些字段以供使用?我使用以下直接代码来保持类似会话的信息可用:
class SockJSBridge implements Handler<BridgeEvent> {
@Override
void handle( BridgeEvent event ) {
SockJSSocket socket = event.socket()
MultiMap headers = socket.headers()
switch( event.type() ){
case REGISTER:
def user = getUserFromJWTHeader event.rawMessage.headers.authorization
headers.add 'userId', user.id
break
case SEND:
String userId = headers.get 'userId'
socket.write new JsonObject( address:userId, body:event.rawMessage?.body ).toBuffer()
break
}
}
}
类SockJSBridge实现处理程序{
@凌驾
无效句柄(BridgeEvent事件){
SockJSSocket=event.socket()
MultiMap headers=socket.headers()
开关(event.type()){
个案登记册:
def user=getUserFromJWTHeader event.rawMessage.headers.authorization
headers.add'userId',user.id
打破
案例发送:
字符串userId=headers.get'userId'
socket.write新JsonObject(地址:userId,body:event.rawMessage?.body).toBuffer()
打破
}
}
}
我认为您需要添加SessionHandler:router.route().handler(SessionHandler.create(store)
按照我已经添加的SessionHandler.create(LocalSessionStore.create(vertx))添加SessionHandler
进一步在我的路由器中处理身份验证。它对HTTP请求很好,因为我添加了JWT承载,但我不知道如何将JWT添加到初始SockJS HTTP握手请求中。你认为我应该使用不同的存储类型,而不是LocalSessionStore
?Sweet,直截了当地说。你打算怎么做关于在客户端添加头?看起来不像是sockjs客户端
支持头它不是sockjs客户端不支持头,而是websocket本身。请参阅。这就是为什么我必须首先建立“unsecured”连接,然后用第一个消息体发送头我也是这么做的,但我的实现要复杂得多,而且有缺陷。如何在客户端设置桥接事件类型?我没有。我只是使用eventBus.registerHandler()
和eventBus.send()
以默认方式设置事件类型的方法很有趣…我在以下操作中没有看到相同的行为(向下滚动到JS端的registerHandler
。我的服务器只看到创建的SOCKET\u
,从不REGISTER
或SEND