# The Java EE 7 Tutorial

# 18.10 Specifying an Endpoint Configurator Class

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.