2015-03-23 1 views
0

Я интегрирую существующее веб-приложение Spring MVC с пружинными websockets. Я был успешно в состоянии интегрировать, следуя инструкциям вКак получить доступ к объекту запроса в методе @MessageMapping с реализацией Spring websocket

https://spring.io/guides/gs/messaging-stomp-websocket/

Существующий веб-приложение имеет фильтр, который устанавливает некоторые из атрибутов. У меня есть требование доступа к атрибутам, заданным фильтром в контроллере i, e в методе @MessageMapping.

Может ли какой-нибудь один tel, как мы можем получить доступ к объекту запроса в методе @MessageMapping?

ответ

2

Когда клиент STOMP подключается к приложению, он сначала должен запросить обновление протокола для переключения на websocket. После использования этого подключения к веб-соке отправляемые/полученные сообщения не проходят через обычный фильтр Сервлета - только первый HTTP-запрос («Рукопожатие»).

В зависимости от вашего варианта использования существует несколько способов достижения этого.

Если это связано с аутентификацией, то there are existing features for this в Spring Framework, но также и в Spring Security.

Если это связано с сеансом HTTP, вы можете легко запросить, чтобы все атрибуты сеанса HTTP были скопированы в сеанс websocket - или даже настроили Handshake для ваших собственных нужд (see reference doc). После этого вы можете ввести область Websocket в методе контроллера @MessageMapping и получить эти атрибуты (see reference doc).

+0

Спасибо за разъяснение, я сделал точно так же, представив пользовательский перехватчик, но как получить доступ к сеансу (скажем, сеанс websocket ojbect) в контроллере? – pavan

+0

, что уже в ответе: область websocket. Вы можете получить доступ к атрибутам сеанса в заголовках сообщений. http://docs.spring.io/spring-framework/docs/4.1.5.RELEASE/spring-framework-reference/html/websocket.html#websocket-stomp-websocket-scope –

+0

Спасибо @Brian Cloze. В аналогичных линиях перехватчиков существует ли способ перехватить соединение с веб-сервером destroy или logout, чтобы я мог сбросить параметры сеанса? – pavan

Смежные вопросы