Java 自定义websocket握手
我有一个Java 自定义websocket握手,java,authentication,kotlin,websocket,handshake,Java,Authentication,Kotlin,Websocket,Handshake,我有一个ServerEndpoint和一个ClientEndpoint通过各自的编码器/解码器交换JSON消息 现在我想为客户端添加选择唯一用户名的功能 假设我有一个有趣的isname(name:String):Boolean(当然是在服务器上) 我还没有尝试过,但我确实认为我可以使用WebFilters来保护对WebSocket端点的访问。(例如,假设我连接到ws://localhost:8888/ws/foo,并添加了一个web筛选器,该筛选器拦截对/ws/*的所有访问),在该筛选器中,我会
ServerEndpoint
和一个ClientEndpoint
通过各自的编码器/解码器交换JSON消息
现在我想为客户端添加选择唯一用户名的功能
假设我有一个有趣的isname(name:String):Boolean
(当然是在服务器上)
我还没有尝试过,但我确实认为我可以使用WebFilter
s来保护对WebSocket端点的访问。(例如,假设我连接到ws://localhost:8888/ws/foo
,并添加了一个web筛选器,该筛选器拦截对/ws/*
的所有访问),在该筛选器中,我会重复查询用户的用户名,并拒绝该用户名,直到isnameavable
返回true
但据我所知,一旦我添加了一个非浏览器客户端,它就会失败
如何编写“自定义握手”
也就是说,我想从ServerEndpoint
的@OnOpen
中反复向客户端查询字符串,直到找到合适的字符串,然后继续其余的设置,之后客户端和服务器可以开始交换JSON消息。就是这样,
@ServerEndpoint("/foo")
class FooServerEndpoint{
@OnOpen
fun open(session:Session){
var userName:String
do{
userName = requestUserName(session)
}while(!acceptUserName(userName,session)
}
}
有办法吗
更新:使用的技术
JavaEE 8
/Kotlin 1.3.21
,部署到Glassfish 5
服务器,并通过基于Glassfish Tyrus 1.15
的客户端连接到该服务器也许可以看看如何创建自定义ServerEndpointConfig.Configurator并重载修改握手()方法,并将此实例作为@ServerEndpoint注释的configurator属性应用于服务器端点?
类似的答案如下:
您还可以在第18.10章中的书“”中找到有关此主题的更多详细信息。读者了解您使用的是哪个java ee/kotlin版本将是有益的。如果您能更新您的问题和/或标签,那将是非常棒的。@FlorianDe这将是JavaEE 8
,Kotlin 1.3.21
,运行在Glassfish 5
服务器上,并通过基于Glassfish Tyrus 1.15
的客户端连接到。我会将信息添加到帖子中。