Example usage for org.springframework.http.server ServerHttpRequest getURI

List of usage examples for org.springframework.http.server ServerHttpRequest getURI

Introduction

In this page you can find the example usage for org.springframework.http.server ServerHttpRequest getURI.

Prototype

URI getURI();

Source Link

Document

Return the URI of the request (including a query string if any, but only if it is well-formed for a URI representation).

Usage

From source file:com.orange.clara.tool.websocket.WebSocketOauthHandler.java

@Override
protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler,
        Map<String, Object> attributes) {
    String query = request.getURI().toString().split("\\?")[1];
    final Map<String, String> params = Splitter.on('&').trimResults().withKeyValueSeparator("=").split(query);

    String token = "";
    if (params.get("token") != null) {
        token = params.get("token");
    }// w ww. j  av  a2  s .  c  o m
    return (Principal) this.resourceServerTokenServices.loadAuthentication(token).getPrincipal();
}

From source file:com.hxh.websocket.HandshakeInterceptor.java

@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
        WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
    System.out.println("Before Handshake");
    System.out.println(request.getHeaders().toString());
    System.out.println("?:" + request.getURI());
    System.out.println(":" + request.getBody());
    return super.beforeHandshake(request, response, wsHandler, attributes);
}

From source file:com.github.jonpeterson.spring.mvc.versioning.VersionedModelResponseBodyAdvice.java

@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
        Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
    VersionedResponseBody versionedResponseBody = returnType.getMethodAnnotation(VersionedResponseBody.class);
    String targetVersion = null;//from   w w w.  j a v  a  2 s . co m

    String queryParamName = versionedResponseBody.queryParamName();
    if (!queryParamName.isEmpty()) {
        List<String> queryParamValues = UriComponentsBuilder.fromUri(request.getURI()).build().getQueryParams()
                .get(queryParamName);
        if (queryParamValues != null && !queryParamValues.isEmpty())
            targetVersion = queryParamValues.get(0);
    }

    if (targetVersion == null) {
        String headerName = versionedResponseBody.headerName();
        if (!headerName.isEmpty()) {
            List<String> headerValues = request.getHeaders().get(headerName);
            if (headerValues != null && !headerValues.isEmpty())
                targetVersion = headerValues.get(0);
        }
    }

    if (targetVersion == null)
        targetVersion = versionedResponseBody.defaultVersion();

    try {
        boolean serializeToSet = false;

        for (BeanPropertyDefinition beanPropertyDefinition : mapper.getSerializationConfig()
                .introspect(mapper.getTypeFactory().constructType(body.getClass())).findProperties()) {
            AnnotatedMember field = beanPropertyDefinition.getField();
            AnnotatedMember setter = beanPropertyDefinition.getSetter();
            if ((field != null && field.hasAnnotation(JsonSerializeToVersion.class))
                    || (setter != null && setter.hasAnnotation(JsonSerializeToVersion.class))) {
                if (setter != null)
                    setter.setValue(body, targetVersion);
                else
                    field.setValue(body, targetVersion);
                serializeToSet = true;
            }
        }

        if (!serializeToSet)
            throw new RuntimeException("no @" + JsonSerializeToVersion.class.getSimpleName()
                    + " annotation found on String field or setter method in " + body.getClass()
                    + "; this is a requirement when using @" + VersionedResponseBody.class.getSimpleName());

    } catch (Exception e) {
        throw new RuntimeException("unable to set the version of the response body model", e);
    }

    return body;
}

From source file:org.springframework.web.socket.server.DefaultHandshakeHandler.java

@Override
public final boolean doHandshake(ServerHttpRequest request, ServerHttpResponse response,
        WebSocketHandler webSocketHandler) throws IOException, HandshakeFailureException {

    logger.debug("Starting handshake for " + request.getURI());

    if (!HttpMethod.GET.equals(request.getMethod())) {
        response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);
        response.getHeaders().setAllow(Collections.singleton(HttpMethod.GET));
        logger.debug("Only HTTP GET is allowed, current method is " + request.getMethod());
        return false;
    }/*from w  w  w.  ja  v  a  2s .com*/
    if (!"WebSocket".equalsIgnoreCase(request.getHeaders().getUpgrade())) {
        handleInvalidUpgradeHeader(request, response);
        return false;
    }
    if (!request.getHeaders().getConnection().contains("Upgrade")
            && !request.getHeaders().getConnection().contains("upgrade")) {
        handleInvalidConnectHeader(request, response);
        return false;
    }
    if (!isWebSocketVersionSupported(request)) {
        handleWebSocketVersionNotSupported(request, response);
        return false;
    }
    if (!isValidOrigin(request)) {
        response.setStatusCode(HttpStatus.FORBIDDEN);
        return false;
    }
    String wsKey = request.getHeaders().getSecWebSocketKey();
    if (wsKey == null) {
        logger.debug("Missing \"Sec-WebSocket-Key\" header");
        response.setStatusCode(HttpStatus.BAD_REQUEST);
        return false;
    }

    String selectedProtocol = selectProtocol(request.getHeaders().getSecWebSocketProtocol());
    // TODO: select extensions

    logger.debug("Upgrading HTTP request");

    response.setStatusCode(HttpStatus.SWITCHING_PROTOCOLS);
    response.getHeaders().setUpgrade("WebSocket");
    response.getHeaders().setConnection("Upgrade");
    response.getHeaders().setSecWebSocketProtocol(selectedProtocol);
    response.getHeaders().setSecWebSocketAccept(getWebSocketKeyHash(wsKey));
    // TODO: response.getHeaders().setSecWebSocketExtensions(extensions);

    response.flush();

    if (logger.isTraceEnabled()) {
        logger.trace("Upgrading with " + webSocketHandler);
    }

    this.requestUpgradeStrategy.upgrade(request, response, selectedProtocol, webSocketHandler);

    return true;
}

From source file:org.springframework.web.socket.server.support.AbstractHandshakeHandler.java

@Override
public final boolean doHandshake(ServerHttpRequest request, ServerHttpResponse response,
        WebSocketHandler wsHandler, Map<String, Object> attributes) throws HandshakeFailureException {

    WebSocketHttpHeaders headers = new WebSocketHttpHeaders(request.getHeaders());
    if (logger.isTraceEnabled()) {
        logger.trace("Processing request " + request.getURI() + " with headers=" + headers);
    }/*from   w  ww .  j a  v  a  2 s  .com*/
    try {
        if (HttpMethod.GET != request.getMethod()) {
            response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);
            response.getHeaders().setAllow(Collections.singleton(HttpMethod.GET));
            if (logger.isErrorEnabled()) {
                logger.error("Handshake failed due to unexpected HTTP method: " + request.getMethod());
            }
            return false;
        }
        if (!"WebSocket".equalsIgnoreCase(headers.getUpgrade())) {
            handleInvalidUpgradeHeader(request, response);
            return false;
        }
        if (!headers.getConnection().contains("Upgrade") && !headers.getConnection().contains("upgrade")) {
            handleInvalidConnectHeader(request, response);
            return false;
        }
        if (!isWebSocketVersionSupported(headers)) {
            handleWebSocketVersionNotSupported(request, response);
            return false;
        }
        if (!isValidOrigin(request)) {
            response.setStatusCode(HttpStatus.FORBIDDEN);
            return false;
        }
        String wsKey = headers.getSecWebSocketKey();
        if (wsKey == null) {
            if (logger.isErrorEnabled()) {
                logger.error("Missing \"Sec-WebSocket-Key\" header");
            }
            response.setStatusCode(HttpStatus.BAD_REQUEST);
            return false;
        }
    } catch (IOException ex) {
        throw new HandshakeFailureException(
                "Response update failed during upgrade to WebSocket: " + request.getURI(), ex);
    }

    String subProtocol = selectProtocol(headers.getSecWebSocketProtocol(), wsHandler);
    List<WebSocketExtension> requested = headers.getSecWebSocketExtensions();
    List<WebSocketExtension> supported = this.requestUpgradeStrategy.getSupportedExtensions(request);
    List<WebSocketExtension> extensions = filterRequestedExtensions(request, requested, supported);
    Principal user = determineUser(request, wsHandler, attributes);

    if (logger.isTraceEnabled()) {
        logger.trace("Upgrading to WebSocket, subProtocol=" + subProtocol + ", extensions=" + extensions);
    }
    this.requestUpgradeStrategy.upgrade(request, response, subProtocol, extensions, user, wsHandler,
            attributes);
    return true;
}

From source file:org.springframework.web.socket.server.support.DefaultHandshakeHandler.java

@Override
public final boolean doHandshake(ServerHttpRequest request, ServerHttpResponse response,
        WebSocketHandler wsHandler, Map<String, Object> attributes) throws HandshakeFailureException {

    WebSocketHttpHeaders headers = new WebSocketHttpHeaders(request.getHeaders());
    if (logger.isTraceEnabled()) {
        logger.trace("Processing request " + request.getURI() + " with headers=" + headers);
    }//w w w. j a  v  a 2  s.c  om
    try {
        if (!HttpMethod.GET.equals(request.getMethod())) {
            response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);
            response.getHeaders().setAllow(Collections.singleton(HttpMethod.GET));
            if (logger.isErrorEnabled()) {
                logger.error("Handshake failed due to unexpected HTTP method: " + request.getMethod());
            }
            return false;
        }
        if (!"WebSocket".equalsIgnoreCase(headers.getUpgrade())) {
            handleInvalidUpgradeHeader(request, response);
            return false;
        }
        if (!headers.getConnection().contains("Upgrade") && !headers.getConnection().contains("upgrade")) {
            handleInvalidConnectHeader(request, response);
            return false;
        }
        if (!isWebSocketVersionSupported(headers)) {
            handleWebSocketVersionNotSupported(request, response);
            return false;
        }
        if (!isValidOrigin(request)) {
            response.setStatusCode(HttpStatus.FORBIDDEN);
            return false;
        }
        String wsKey = headers.getSecWebSocketKey();
        if (wsKey == null) {
            if (logger.isErrorEnabled()) {
                logger.error("Missing \"Sec-WebSocket-Key\" header");
            }
            response.setStatusCode(HttpStatus.BAD_REQUEST);
            return false;
        }
    } catch (IOException ex) {
        throw new HandshakeFailureException(
                "Response update failed during upgrade to WebSocket, uri=" + request.getURI(), ex);
    }

    String subProtocol = selectProtocol(headers.getSecWebSocketProtocol(), wsHandler);
    List<WebSocketExtension> requested = headers.getSecWebSocketExtensions();
    List<WebSocketExtension> supported = this.requestUpgradeStrategy.getSupportedExtensions(request);
    List<WebSocketExtension> extensions = filterRequestedExtensions(request, requested, supported);
    Principal user = determineUser(request, wsHandler, attributes);

    if (logger.isTraceEnabled()) {
        logger.trace("Upgrading to WebSocket, subProtocol=" + subProtocol + ", extensions=" + extensions);
    }
    this.requestUpgradeStrategy.upgrade(request, response, subProtocol, extensions, user, wsHandler,
            attributes);
    return true;
}

From source file:org.springframework.web.socket.server.support.WebSocketHttpRequestHandler.java

@Override
public void handleRequest(HttpServletRequest servletRequest, HttpServletResponse servletResponse)
        throws ServletException, IOException {

    ServerHttpRequest request = new ServletServerHttpRequest(servletRequest);
    ServerHttpResponse response = new ServletServerHttpResponse(servletResponse);

    HandshakeInterceptorChain chain = new HandshakeInterceptorChain(this.interceptors, this.wsHandler);
    HandshakeFailureException failure = null;

    try {/*from  w w  w  .  ja  va  2s.  c o  m*/
        if (logger.isDebugEnabled()) {
            logger.debug(servletRequest.getMethod() + " " + servletRequest.getRequestURI());
        }
        Map<String, Object> attributes = new HashMap<>();
        if (!chain.applyBeforeHandshake(request, response, attributes)) {
            return;
        }
        this.handshakeHandler.doHandshake(request, response, this.wsHandler, attributes);
        chain.applyAfterHandshake(request, response, null);
        response.close();
    } catch (HandshakeFailureException ex) {
        failure = ex;
    } catch (Throwable ex) {
        failure = new HandshakeFailureException("Uncaught failure for request " + request.getURI(), ex);
    } finally {
        if (failure != null) {
            chain.applyAfterHandshake(request, response, failure);
            throw failure;
        }
    }
}

From source file:org.springframework.web.socket.sockjs.AbstractSockJsService.java

/**
 * TODO/*from   w ww .j a v a 2  s . co  m*/
 *
 * @param request
 * @param response
 * @param sockJsPath
 *
 * @throws Exception
 */
@Override
public final void handleRequest(ServerHttpRequest request, ServerHttpResponse response,
        WebSocketHandler handler) throws IOException, TransportErrorException {

    String sockJsPath = getSockJsPath(request);
    if (sockJsPath == null) {
        logger.warn("Could not determine SockJS path for URL \"" + request.getURI().getPath()
                + ". Consider setting validSockJsPrefixes.");
        response.setStatusCode(HttpStatus.NOT_FOUND);
        return;
    }

    logger.debug(request.getMethod() + " with SockJS path [" + sockJsPath + "]");

    try {
        request.getHeaders();
    } catch (IllegalArgumentException ex) {
        // Ignore invalid Content-Type (TODO)
    }

    try {
        if (sockJsPath.equals("") || sockJsPath.equals("/")) {
            response.getHeaders().setContentType(new MediaType("text", "plain", Charset.forName("UTF-8")));
            response.getBody().write("Welcome to SockJS!\n".getBytes("UTF-8"));
            return;
        } else if (sockJsPath.equals("/info")) {
            this.infoHandler.handle(request, response);
            return;
        } else if (sockJsPath.matches("/iframe[0-9-.a-z_]*.html")) {
            this.iframeHandler.handle(request, response);
            return;
        } else if (sockJsPath.equals("/websocket")) {
            handleRawWebSocketRequest(request, response, handler);
            return;
        }

        String[] pathSegments = StringUtils.tokenizeToStringArray(sockJsPath.substring(1), "/");
        if (pathSegments.length != 3) {
            logger.warn("Expected \"/{server}/{session}/{transport}\" but got \"" + sockJsPath + "\"");
            response.setStatusCode(HttpStatus.NOT_FOUND);
            return;
        }

        String serverId = pathSegments[0];
        String sessionId = pathSegments[1];
        String transport = pathSegments[2];

        if (!validateRequest(serverId, sessionId, transport)) {
            response.setStatusCode(HttpStatus.NOT_FOUND);
            return;
        }

        handleTransportRequest(request, response, sessionId, TransportType.fromValue(transport), handler);
    } finally {
        response.flush();
    }
}

From source file:org.springframework.web.socket.sockjs.AbstractSockJsService.java

/**
 * Return the SockJS path or null if the path could not be determined.
 *//*  w w  w  . ja  v a  2  s.  c om*/
private String getSockJsPath(ServerHttpRequest request) {

    String path = request.getURI().getPath();

    // SockJS prefix hints?
    if (!this.validSockJsPrefixes.isEmpty()) {
        for (String prefix : this.validSockJsPrefixes) {
            int index = path.indexOf(prefix);
            if (index != -1) {
                this.knownSockJsPrefixes.add(path.substring(0, index + prefix.length()));
                return path.substring(index + prefix.length());
            }
        }
        return null;
    }

    // SockJS info request?
    if (path.endsWith("/info")) {
        this.knownSockJsPrefixes.add(path.substring(0, path.length() - "/info".length()));
        return "/info";
    }

    // Have we seen this prefix before (following the initial /info request)?
    String match = null;
    for (String sockJsPath : this.knownSockJsPrefixes) {
        if (path.startsWith(sockJsPath)) {
            if ((match == null) || (match.length() < sockJsPath.length())) {
                match = sockJsPath;
            }
        }
    }
    if (match != null) {
        String result = path.substring(match.length());
        Assert.isTrue(result.charAt(0) == '/',
                "Invalid SockJS path extracted from incoming path \"" + path
                        + "\". The extracted SockJS path is \"" + result
                        + "\". It was extracted from these known SockJS prefixes " + this.knownSockJsPrefixes
                        + ". Consider setting 'validSockJsPrefixes' on DefaultSockJsService.");
        return result;
    }

    // SockJS greeting?
    String pathNoSlash = path.endsWith("/") ? path.substring(0, path.length() - 1) : path;
    String lastSegment = pathNoSlash.substring(pathNoSlash.lastIndexOf('/') + 1);

    if ((TransportType.fromValue(lastSegment) == null) && !lastSegment.startsWith("iframe")) {
        this.knownSockJsPrefixes.add(path);
        return "";
    }

    return null;
}

From source file:org.springframework.web.socket.sockjs.support.AbstractSockJsService.java

/**
 * This method determines the SockJS path and handles SockJS static URLs.
 * Session URLs and raw WebSocket requests are delegated to abstract methods.
 *//*from w  w  w . j av a 2 s .  c  o m*/
@Override
public final void handleRequest(ServerHttpRequest request, ServerHttpResponse response,
        @Nullable String sockJsPath, WebSocketHandler wsHandler) throws SockJsException {

    if (sockJsPath == null) {
        if (logger.isWarnEnabled()) {
            logger.warn("Expected SockJS path. Failing request: " + request.getURI());
        }
        response.setStatusCode(HttpStatus.NOT_FOUND);
        return;
    }

    try {
        request.getHeaders();
    } catch (InvalidMediaTypeException ex) {
        // As per SockJS protocol content-type can be ignored (it's always json)
    }

    String requestInfo = (logger.isDebugEnabled() ? request.getMethod() + " " + request.getURI() : null);

    try {
        if (sockJsPath.equals("") || sockJsPath.equals("/")) {
            if (requestInfo != null) {
                logger.debug("Processing transport request: " + requestInfo);
            }
            response.getHeaders().setContentType(new MediaType("text", "plain", StandardCharsets.UTF_8));
            response.getBody().write("Welcome to SockJS!\n".getBytes(StandardCharsets.UTF_8));
        }

        else if (sockJsPath.equals("/info")) {
            if (requestInfo != null) {
                logger.debug("Processing transport request: " + requestInfo);
            }
            this.infoHandler.handle(request, response);
        }

        else if (sockJsPath.matches("/iframe[0-9-.a-z_]*.html")) {
            if (!this.allowedOrigins.isEmpty() && !this.allowedOrigins.contains("*")) {
                if (requestInfo != null) {
                    logger.debug("Iframe support is disabled when an origin check is required. "
                            + "Ignoring transport request: " + requestInfo);
                }
                response.setStatusCode(HttpStatus.NOT_FOUND);
                return;
            }
            if (this.allowedOrigins.isEmpty()) {
                response.getHeaders().add(XFRAME_OPTIONS_HEADER, "SAMEORIGIN");
            }
            if (requestInfo != null) {
                logger.debug("Processing transport request: " + requestInfo);
            }
            this.iframeHandler.handle(request, response);
        }

        else if (sockJsPath.equals("/websocket")) {
            if (isWebSocketEnabled()) {
                if (requestInfo != null) {
                    logger.debug("Processing transport request: " + requestInfo);
                }
                handleRawWebSocketRequest(request, response, wsHandler);
            } else if (requestInfo != null) {
                logger.debug("WebSocket disabled. Ignoring transport request: " + requestInfo);
            }
        }

        else {
            String[] pathSegments = StringUtils.tokenizeToStringArray(sockJsPath.substring(1), "/");
            if (pathSegments.length != 3) {
                if (logger.isWarnEnabled()) {
                    logger.warn("Invalid SockJS path '" + sockJsPath + "' - required to have 3 path segments");
                }
                if (requestInfo != null) {
                    logger.debug("Ignoring transport request: " + requestInfo);
                }
                response.setStatusCode(HttpStatus.NOT_FOUND);
                return;
            }

            String serverId = pathSegments[0];
            String sessionId = pathSegments[1];
            String transport = pathSegments[2];

            if (!isWebSocketEnabled() && transport.equals("websocket")) {
                if (requestInfo != null) {
                    logger.debug("WebSocket disabled. Ignoring transport request: " + requestInfo);
                }
                response.setStatusCode(HttpStatus.NOT_FOUND);
                return;
            } else if (!validateRequest(serverId, sessionId, transport) || !validatePath(request)) {
                if (requestInfo != null) {
                    logger.debug("Ignoring transport request: " + requestInfo);
                }
                response.setStatusCode(HttpStatus.NOT_FOUND);
                return;
            }

            if (requestInfo != null) {
                logger.debug("Processing transport request: " + requestInfo);
            }
            handleTransportRequest(request, response, wsHandler, sessionId, transport);
        }
        response.close();
    } catch (IOException ex) {
        throw new SockJsException("Failed to write to the response", null, ex);
    }
}