This post is how to connect a websocket which is secured by Basic Authentication.
I will be using javax.websocket-api jar file.
Create WebContainer object
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
using the container connect to the service
1
| container.connectToServer(endpoint, clientConfig, new URI("wss://hostname:port/demo"));
|
credentials are passed to clientConfig object.
1
2
3
4
5
6
7
8
9
10
11
| ClientEndpointConfig.Configurator configurator = new ClientEndpointConfig.Configurator() {
public void beforeRequest(Map<String, List<String>> headers) {
String credentials = "username:password";
headers.put("Authorization", Arrays.asList("Basic " + new BASE64Encoder().encode(credentials.getBytes())));
System.out.println("Header set successfully");
}
};
ClientEndpointConfig clientConfig = ClientEndpointConfig.Builder.create()
.configurator(configurator)
.build();
|
endpoint is the callback handler. Once the session is established with the service then we pass a message using the session object. onMessage() method should be overridden to receive the message.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| Endpoint endpoint = new Endpoint() {
@Override
public void onOpen(Session session, EndpointConfig config) {
session.addMessageHandler(new MessageHandler.Whole<String>() {
@Override
public void onMessage(String content) {
System.out.println("Received message: "+content);
}
});
try {
System.out.println("Sending message to endpoint: " + msg);
System.out.println("Session Id:: "+session.getId());
session.getBasicRemote().sendText(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
};
|