Сейчас сложно себе представить требования к API, которые бы не включали в себя поддержку разного рода пушей. Взаимодействие с сервером уже давное не происходит в формате вопрос-ответ. Пользователи хотят видеть, что кто-то сейчас пишет комментарий, кто-то подключился к чату. Хотят получать состояние сразу, как только оно станет доступным, а не когда они спросят об изменениях.
Spring в этом плане по идеологии мне очень напоминает продукты компании SAP AG. Вроде как все все есть и все пользуются, но когда начинаешь использовать, выясняется что в 2020 году в spring так и не осилили свой сервер авторизации к примеру вот тут можно прочитать почему они считают что это нормально.
То же самое касается поддержки websocket, из-за того, что фактически нет своего сервера авторизации, использование spring-security не очевидно. Есть статьи на stackowerflow и очень размытая официальная документация, которая не помогает понять что поддерживает spring-websocket и зачем вообще его нужно использоваться.
Я не исключаю, что официальная документация не помогает только мне. В любом случае, решил собрать проект чата с поддержкой комнат и личных сообщений пользвателю, авторизация в чате будет с помощью jwt-токена, а генерировать токены для пользователей будет keycloak.
В проекте использованы следующие зависимости:
В статье расскажу как настроить каждый компонент. Обмен сообщениям будет реализован с помощью протокола STOMP, [пример того, как это работает выложен на github] ().