@Override public void onWebSocketError(Throwable cause) { logger.debug("onWebSocketError", cause); close(session, 1011, "Server error"); }
@Override public void onWebSocketBinary(byte[] payload, int offset, int length) { try { WebSocketMessage webSocketMessage = messageFactory.parseMessage(payload, offset, length); switch (webSocketMessage.getType()) { case REQUEST_MESSAGE: handleRequest(webSocketMessage.getRequestMessage()); break; case RESPONSE_MESSAGE: handleResponse(webSocketMessage.getResponseMessage()); break; default: close(session, 1018, "Badly formatted"); break; } } catch (InvalidMessageException e) { logger.debug("Parsing", e); close(session, 1018, "Badly formatted"); } }
private void handleRequest(WebSocketRequestMessage requestMessage) { try { HttpServletRequest servletRequest = createRequest(requestMessage, context); HttpServletResponse servletResponse = createResponse(requestMessage); servlet.service(servletRequest, servletResponse); servletResponse.flushBuffer(); requestLog.log(new LoggableRequest(servletRequest), new LoggableResponse(servletResponse)); } catch (IOException | ServletException e) { logger.warn("Servlet Error: " + requestMessage.getVerb() + " " + requestMessage.getPath() + "\n" + requestMessage.getBody(), e); sendErrorResponse(requestMessage, Response.status(500).build()); } }
@Override public Object createWebSocket(ServletUpgradeRequest request, ServletUpgradeResponse response) { try { Optional<WebSocketAuthenticator> authenticator = Optional.ofNullable(environment.getAuthenticator()); Object authenticated = null; if (authenticator.isPresent()) { AuthenticationResult authenticationResult = authenticator.get().authenticate(request); if (!authenticationResult.getUser().isPresent() && authenticationResult.isRequired()) { response.sendForbidden("Unauthorized"); return null; } else { authenticated = authenticationResult.getUser().orElse(null); } } return new WebSocketResourceProvider(this.environment.getJerseyServletContainer(), this.environment.getRequestLog(), authenticated, this.environment.getMessageFactory(), Optional.ofNullable(this.environment.getConnectListener()), this.environment.getIdleTimeoutMillis()); } catch (AuthenticationException | IOException e) { logger.warn("Authentication failure", e); return null; } }