Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义websocket握手_Java_Authentication_Kotlin_Websocket_Handshake - Fatal编程技术网

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
的客户端连接到。我会将信息添加到帖子中。