我有一个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
的客户端连接
答案 0 :(得分:0)
也许要看看如何创建自定义ServerEndpointConfig.Configurator并重载ModifyHandshake()方法,然后将此实例作为@ServerEndpoint批注的configurator属性应用于服务器端点? 这里类似的答案:https://stackoverflow.com/a/21766822/11133168
您也可以在第18.10章的“ The Java EE 7 Tutorial”一书中找到有关此主题的更多详细信息