The Java API for WebSocket enables you to configure how the container
creates server endpoint instances. You can provide custom endpoint
configuration logic to:
-
Access the details of the initial HTTP request for a WebSocket
connection
-
Perform custom checks on the Origin HTTP header
-
Modify the WebSocket handshake response
-
Choose a WebSocket subprotocol from those requested by the client
-
Control the instantiation and initialization of endpoint instances
To provide custom endpoint configuration logic, you extend the
ServerEndpointConfig.Configurator class and override some of its
methods. In the endpoint class, you specify the configurator class using
the configurator parameter of the ServerEndpoint annotation.
For example, the following configurator class makes the handshake
request object available to endpoint instances:
public class CustomConfigurator extends ServerEndpointConfig.Configurator {
@Override
public void modifyHandshake(ServerEndpointConfig conf,
HandshakeRequest req,
HandshakeResponse resp) {
conf.getUserProperties().put("handshakereq", req);
}
}
The following endpoint class configures endpoint instances with the
custom configurator, which enables them to access the handshake request
object:
@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();
...
}
}
The endpoint class can use the handshake request object to access the
details of the initial HTTP request, such as its headers or the
HttpSession object.
For more information on endpoint configuration, see the API reference
for the ServerEndpointConfig.Configurator class.