Будет ли javax.servlet.Filter перехватывать сообщения Websocket? (API Java Servlet)
Когда у меня есть соединение через веб-сокет, скажите "/ws"
Будет ли обычный javax.servlet.Filter по пути "/ws" перехватывать каждое сообщение как обычный HTTP-запрос? Будет ли он перехватывать только первый запрос (как часть рукопожатия?)
Если нет, то как я могу сделать такой фильтр для сообщений websocket?
Я не нахожу каких-либо подробностей об этом в спецификации.
2 ответа
Нет, Servlet Filter не будет перехватывать сообщения WebSocket.
Сервлет не поддерживает протокол WebSocket вообще. Единственное, что вы можете сделать, это зарегистрировать HttpUpgradeHandler (см. HttpServletRequest # upgrade), а затем реализовать протокол WebSocket поверх этого.
Или... если вы хотите сэкономить время, взгляните на JSR 356 и его реализации, они работают поверх этого API. Я лично работаю над Tyrus, который является эталонной реализацией JSR 356. (Он является частью Java EE 7, но вам нужен только Servlet 3.1 API).
Будет ли он перехватывать только первый запрос (как часть рукопожатия?)
Да, только первый запрос, тот, который инициирует рукопожатие WebSocket, перехватывается фильтром сервлета.