Spring Boot Websocket и SPA Natural Routing - PullRequest
       13

Spring Boot Websocket и SPA Natural Routing

0 голосов
/ 11 ноября 2018

В настоящее время я внедряю приложение Spring Boot с интерфейсом SPA React. Для маршрутизации каждого запроса, который точно не сопоставлен с маршрутом, я использую следующий контроллер для пересылки запросов в мое приложение React (как показано здесь: https://stackoverflow.com/a/40769350/4454752 с небольшим изменением, чтобы также поддерживать не сопоставленные запросы к URL-адресу форма /a/b/c/...):

@Controller
public class BaseController {

    private static final Logger LOGGER = LogManager.getLogger(BaseController.class);


    // Match everything without a suffix (so not a static resource)
    @RequestMapping(value = "/**/{[path:[^\\.]*}")
    public String redirect() {
        LOGGER.info("Redirect request to React app");

        // Forward to home page so that route is preserved.
        return "forward:/";
    }
}

В дополнение к этому я хочу иметь простой маршрут Websocket в /socket, который обрабатывает как текстовые, так и двоичные сообщения Websocket. Я не хочу использовать протокол STOMP на этой конечной точке.

Я настроил свои веб-сокеты так:

@Configuration
@EnableWebSocket
@CrossOrigin(origins = "*")
public class WebSocketConfiguration implements WebSocketConfigurer {


    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebsocketHandler(), "/socket").setAllowedOrigins("*").withSockJS();
    }
}

Проблема, с которой я столкнулся, заключается в том, что запросы Websocket, отправляемые на конечную точку /socket, сопоставляются с BaseController#redirect(), и поэтому клиент Websocket не получает действительное соединение.

У меня вопрос: как я могу исключить маршрут /socket из правила отображения BaseController? Я думал, что если маршрут уже нанесен на карту, он не получит BaseController. Или мне нужно каким-то образом снизить приоритет BaseController?

Если кто-нибудь знает метод, как это сделать, я был бы очень счастлив. Заранее спасибо :)

...