У меня есть 2 конечные точки WebSockets:
registry.addEndpoint("/ws-handshake").withSockJS();
registry.addEndpoint("/api/admin/ws-handshake").withSockJS();
Первый из них без аутентификации, второй защищен Spring Boot Security, использует ту же конфигурацию, что и HTTP-безопасность, и использует OAuth2. Заголовок авторизации используется для подключения к защищенной конечной точке.
Я использую простой цикл for, так как это POC, но такой же объем данных будет использоваться в производственной среде, чтобы вернуть много записей, это делается с помощью класса SimpMessageSendingOperations, предоставляемого Spring Boot:
private SimpMessageSendingOperations messagingTemplate;
@MessageMapping("/tail-topic")
public void tailLogSendToTopic(@Payload WebSocketPoCPayload payload) throws InterruptedException {
String topicName = "/topic/logentries";
for (int i = 0; i < 3000; i++) {
WebSocketPoCMessage message = new WebSocketPoCMessage(String.format("%d : returning payload %s", i, payload.getName()));
messageTemplate.convertAndSend(topicName, message);
// TimeUnit.MILLISECONDS.sleep(50);
}
log.info("done returning all messages");
}
Когда я отправляю запрос через незащищенную конечную точку, все работает нормально, я получаю все на стороне клиента.
Когда я отправляю запрос через защищенную конечную точку, все работает нормально до определенного номера полезной нагрузки (например, 1499, всегда совпадает с номером полезной нагрузки).
Если я не раскомментирую тайм-аут, но потребуется больше 10 миллисекунд, чем снова, я потеряю соединение, но с более поздним номером.
Похоже, мои настройки безопасности отключили соединение, если они видят слишком много трафика, я что-то упустил в своей конфигурации безопасности?