长连接服务或者消息推送系统,我想要跟注册用户绑定,意思就是注册用户登录成功的连接才能正常建立
要解决这个问题,一般采用什么方式或者思路呢?
长连接服务或者消息推送系统,我想要跟注册用户绑定,意思就是注册用户登录成功的连接才能正常建立
要解决这个问题,一般采用什么方式或者思路呢?
tcp 长连接没有做过,不大清楚
我这边有两种 WebSocket Token 认证方式
@OnOpen
方法中就可以进行 Token 认证与 Token 和 Session 的成对存储,简单方便,缺点是认证时不够安全;@OnOpen
方法中调用 session.getBasicRemote().sendText(String)
来发送验证信息,在服务器端的 @OnMessage
中进行 Token 认证与 Token 和 Session 的成对存储,优点是认证时较安全,缺点是 @OnMessage
中混杂认证与信息传输,方法不再那么纯,而且频繁传输小数据代码性能会不如第一种;相比之下,我选择了第一种,因为代码逻辑更清晰,而不足的安全方面,我的 WebSocket 仅仅作为服务器新信息通知,具体的信息获取需要使用其他 API,这些 API 都足够安全,一定程度弥补了 WebSocket 认证的不安全性。
楼上的第一种确实也可以,我们这么用过,我目前在考虑第二种方案:
1、首先通过普通的http restful 请求服务器登录,如果通过返回token。
2、拿token去请求接口,校验token,校验通过,简历长连接
wss://localhost:7896/?token=Token
)一种解决方法是:确立建立连接时客户的发送的第一条消息必须是认证消息,如果认真失败,服务器直接断开连接。不过这种方式不太友好。
另外一种比较友好的方式是:服务器对每个连接记录一个认证状态,当然也可以包括用户的基本信息,这样就可以把连接和用户联系到一起了。这也就是常用的Session机制。
2 回答564 阅读✓ 已解决
1 回答720 阅读✓ 已解决
634 阅读
可以在ws的url里加参数,比如: wss://127.0.0.1/websocket?user=foo&password=bar,WebSocket服务器在握手的时候可以得到参数里的信息,认证成功后握手成功建立连接,不成功则关闭连接。