Проверка пути Websocket - PullRequest
       4

Проверка пути Websocket

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

Я пытаюсь применить веб-сокеты на стороне сервера для получения информации от разных клиентов. Конечная точка веб-сокета использует pathparam для идентификации конкретного клинта.

ws://192.168.1.100:8080/listener/device_00001

И класс конечной точки:

@ServerEndpoint(
   value = "/listener/{deviceid}",
   configurator = WsConfig.class,
   subprotocols = {"abcProtocolv1", "abcProtocolv2"}
)
public class WsServer {

   @OnOpen
   public void onOpen(final Session session, @PathParam("deviceid") final String id) {
      //some handling method
   }

   @OnClose
   //some code here

   @OnMessage
   //some code here

}

Код работает до этого шага, и я могу получать сообщения от разных клиентов и идентифицировать устройства на основе pathparam.

Тем не менее, я хотел бы отправить ответ 404 для сбоя при обновлении связи, если идентификатор устройства недействителен.Ответ 404 должен быть отправлен до @OnOpen, и я проверил конфигуратор, и в него включены только пять функций:

  • getEndpointInstance
  • getNegotiatedSubprotocol
  • getNegotiatedExtensions
  • checkOrigin
  • modifyHandshake

Кажется, что все функции не в состоянии обрабатывать проверку перед рукопожатием обновления, но я не могу найти какой-либо общий подход.

Должен ли я также применить @WebFilter?или в @ServerEndPoint есть какой-то общий подход?

1 Ответ

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

Я наконец пытаюсь обработать проверку в modifyHandshake, но это не должно быть общим подходом.

В modifyHandshake переменная @PathParam находится в request.getParameterMap().

@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
    String deviceId = request.getParameterMap().get("deviceid").get(0);
    if (isDeviceValid(deviceId)) {
       //Some code here and 101 is kept 
    } else {
       //Use java reflection to modify the http status and then clear the header 
       //The reflection code is depended on your Http Handler type
       response.getHeaders().clear()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...