如何在码头验证 websocket 客户端?

How to authenticate websocket client in jetty?

我在服务器端使用嵌入式码头,它将接受 http 和 websocket 请求。我正在使用 org.eclipse.jetty.security.authentication.FormAuthenticator 来验证用户。用户登录后,我的 java 脚本代码将打开与服务器的 websocket 连接。我想知道服务器如何验证此 websocket 客户端,以避免接受来自未经授权的客户端(例如 java 客户端)的 websocket 连接。

假设您已正确设置嵌入式码头,它将使用与普通网络应用程序相同的安全约束系统来验证分配给该网络套接字的 url 模式的用户角色。

如果用户未通过身份验证并设置为该 websocket 的授权角色,这甚至会阻止 websocket 升级(在服务器端尝试)。

但是要知道浏览器在场景中的行为非常不同。如果存在身份验证或授权问题,您可能不会从 javascript WebSocket 对象中获得合适的错误消息。它只会匿名失败,客户端仅关闭代码(例如 1006)并且没有关闭原因。