自定义websocket握手

时间:2019-03-04 10:45:44

标签: java authentication kotlin websocket handshake

我有一个2019-03-04 09:39:01 UTC ServerEndpoint通过各自的编码器/解码器交换JSON消息。

现在,我想增加客户端选择唯一用户名的功能。

假设我有一个ClientEndpoint(当然在服务器上)。

还没有尝试过,但是我确实认为我可以使用fun isNameAvailable(name: String): Boolean来保护对WebSocket端点的访问。 (例如,假设我连接到WebFilter,并且添加了一个Web过滤器,该过滤器拦截了对ws://localhost:8888/ws/foo的所有访问),在该过滤器中,我会反复向用户查询用户名并拒绝它,直到{{1} }返回/ws/*

但是据我了解,添加非浏览器客户端后,该操作就会失败。

如何编写“自定义握手”?

即我想从isNameAvailable的{​​{1}}中反复查询客户端中的true,直到适合为止,然后再继续其余的设置,此后客户端和服务器可以开始交换JSON消息。就是这样:

String

有办法吗?

更新:使用的技术

ServerEndpoint / @OnOpen,部署到@ServerEndpoint("/foo") class FooServerEndpoint{ @OnOpen fun open(session:Session){ var userName:String do{ userName = requestUserName(session) }while(!acceptUserName(userName,session) } } 服务器并由基于JavaEE 8的客户端连接

1 个答案:

答案 0 :(得分:0)

也许要看看如何创建自定义ServerEndpointConfig.Configurator并重载ModifyHandshake()方法,然后将此实例作为@ServerEndpoint批注的configurator属性应用于服务器端点? 这里类似的答案:https://stackoverflow.com/a/21766822/11133168

您也可以在第18.10章的“ The Java EE 7 Tutorial”一书中找到有关此主题的更多详细信息