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