Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Spring boot spring rsocket是否支持在@ConnectMapping注释的方法中返回RejectedSetupException?_Spring Boot_Rsocket_Spring Rsocket - Fatal编程技术网

Spring boot spring rsocket是否支持在@ConnectMapping注释的方法中返回RejectedSetupException?

Spring boot spring rsocket是否支持在@ConnectMapping注释的方法中返回RejectedSetupException?,spring-boot,rsocket,spring-rsocket,Spring Boot,Rsocket,Spring Rsocket,我遵循SpringRSocket演示项目来完成我的代码。我在服务器端代码中添加了一些身份验证逻辑,如下所示。您可以看到,在身份验证逻辑“CLIENT.add(requester)”之后,我在中抛出了一个异常。我在SpringRSocket演示项目中执行名为“testRequestGetsResponse”的测试方法,发现无法接收异常。如何在@ConnectMapping注释的方法中处理设置负载,并在需要时返回RejectedSetupException requester.rsocket()

我遵循SpringRSocket演示项目来完成我的代码。我在服务器端代码中添加了一些身份验证逻辑,如下所示。您可以看到,在身份验证逻辑“CLIENT.add(requester)”之后,我在中抛出了一个异常。我在SpringRSocket演示项目中执行名为“testRequestGetsResponse”的测试方法,发现无法接收异常。如何在@ConnectMapping注释的方法中处理设置负载,并在需要时返回RejectedSetupException


requester.rsocket()
.onClose()
.doFirst(()->{
//将所有新客户端添加到客户端列表
log.info(“客户端:{}已连接。”,客户端);
//进程设置有效负载期间引发异常
//我的身份验证码。
试一试{
//CLIENTS.add(请求者);
抛出新的RuntimeException();
}捕获(异常){
抛出异常;
}
})
.doon错误(错误->{
//客户端关闭通道时发出警告
log.warn(“到客户端{}的通道已关闭”,客户端);
})
.doFinally(消费者->{
//从客户端列表中删除断开连接的客户端
删除(请求者);
log.info(“客户端{}断开连接”,客户端);
})
.subscribe();

您应该定义
@ConnectionMapping
方法,如下所示:

@ConnectionMapping
单手设置(@Payload-String-Payload){
//将所有新客户端添加到客户端列表
log.info(“客户端:{}已连接。”,客户端);
布尔值isAuthenticated=…//我的身份验证代码。
如果(!已验证){
//进程设置有效负载期间引发异常
返回Mono.error(新的RejectedSetupException(“连接未通过身份验证”);
}
//如果客户端经过身份验证,则添加客户端
CLIENTS.add(请求者);
requester.rsocket()
.onClose()
.doFinally(消费者->{
//从客户端列表中删除断开连接的客户端
删除(请求者);
log.info(“客户端{}断开连接”,客户端);
})
.subscribe();
返回Mono.empty();
}

从上面的代码中可以看出,如果连接未通过身份验证,它将返回一个带有相应错误的
Mono.error
,我尝试了它,它按照我的预期工作。多谢各位~