Java API для веб-сокетов позволяет вам настраивать, как контейнер создаёт объекты конечных точек сервера. Вы можете предоставить кастомную логику конфигурации конечной точки для:
-
доступа к деталям начального HTTP-запроса для соединения с веб-сокетом;
-
выполнения кастомной проверки заголовка HTTP Origin
;
-
изменения ответ веб-сокета при установлении соединения;
-
выбора подпротокола веб-сокетов из тех, которые запрашивает клиент;
-
управления созданием и инициализацией объектов конечных точек.
Чтобы обеспечить кастомную логику конфигурации конечной точки, расширьте класс ServerEndpointConfig.Configurator
и переопределите некоторые из его методов. В классе конечной точки укажите класс конфигуратора с помощью параметра configurator
аннотации @ServerEndpoint
.
Например, следующий класс конфигуратора делает объект запроса установления соединения доступным для объектов конечной точки:
public class CustomConfigurator extends ServerEndpointConfig.Configurator {
@Override
public void modifyHandshake(ServerEndpointConfig conf,
HandshakeRequest req,
HandshakeResponse resp) {
conf.getUserProperties().put("handshakereq", req);
}
}
Следующий класс конечной точки настраивает объекты конечных точек с помощью кастомного конфигуратора, который позволяет им получать доступ к объекту запроса установления соединения:
@ServerEndpoint(
value = "/myendpoint",
configurator = CustomConfigurator.class
)
public class MyEndpoint {
@OnOpen
public void open(Session s, EndpointConfig conf) {
HandshakeRequest req = (HandshakeRequest) conf.getUserProperties()
.get("handshakereq");
Map<String,List<String>> headers = req.getHeaders();
...
}
}
Класс конечной точки может использовать объект запроса установления соединения для доступа к деталям исходного HTTP-запроса, таким как его заголовки или объект HttpSession
.
Для получения дополнительной информации о конфигурации конечной точки см. ссылку на API для класса ServerEndpointConfig.Configurator
.