@Override public String getOrigin() { return getHeader("Origin"); }
private static String getHeaderOrParameter(ServletUpgradeRequest servletUpgradeRequest, String key) { String value = servletUpgradeRequest.getHeader(key); if (value == null) value = servletUpgradeRequest.getHttpServletRequest().getParameter(key); return value; } }
/** * Gets the header for a header name. * * @param name * @return */ public String getHeader(String name) { return webSocket.getUpgradeRequest().getHeader(name); }
@Override public Object createWebSocket(ServletUpgradeRequest req, ServletUpgradeResponse resp) { if (channelManager.isShutdown()) { sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "Server is in the maintenance mode", resp); return null; } String auth = req.getHeader(HttpHeaders.AUTHORIZATION); if (auth == null) { sendError(HttpServletResponse.SC_UNAUTHORIZED, "Missing " + HttpHeaders.AUTHORIZATION + " header", resp); return null; } if (invalidApiKey(auth)) { sendError(HttpServletResponse.SC_FORBIDDEN, "Invalid API token: '" + auth + "'", resp); return null; } UUID user = apiKeyDao.findUserId(auth); if (user == null) { sendError(HttpServletResponse.SC_FORBIDDEN, "User with key '" + auth + "' not found", resp); return null; } UUID channelId = UUID.randomUUID(); String channelInfo = req.getHeader(InternalConstants.Headers.AGENT); return new WebSocketListener(channelManager, channelId, channelInfo); }
@Override public void doHandshakeResponse(ServletUpgradeRequest request, ServletUpgradeResponse response) throws IOException { String key = request.getHeader("Sec-WebSocket-Key"); if (key == null) { throw new IllegalStateException("Missing request header 'Sec-WebSocket-Key'"); } // build response response.setHeader("Upgrade","WebSocket"); response.addHeader("Connection","Upgrade"); response.addHeader("Sec-WebSocket-Accept",AcceptHash.hashKey(key)); request.complete(); response.setStatusCode(HttpServletResponse.SC_SWITCHING_PROTOCOLS); response.complete(); } }
channel.setSession(session); String ctype = servletUpgradeRequest.getHeader("Content-Type"); ContentType contentType = WebSocketUtil.getContentType(ctype, protocol); channel.setContentType(contentType);