Search in sources :

Example 71 with ServletServerHttpRequest

use of org.springframework.http.server.ServletServerHttpRequest in project spring-session by spring-projects.

the class SessionRepositoryMessageInterceptor method beforeHandshake.

@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
    if (request instanceof ServletServerHttpRequest) {
        ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
        HttpSession session = servletRequest.getServletRequest().getSession(false);
        if (session != null) {
            setSessionId(attributes, session.getId());
        }
    }
    return true;
}
Also used : ServletServerHttpRequest(org.springframework.http.server.ServletServerHttpRequest) HttpSession(javax.servlet.http.HttpSession)

Example 72 with ServletServerHttpRequest

use of org.springframework.http.server.ServletServerHttpRequest in project com.revolsys.open by revolsys.

the class WebMethodHandler method body.

@SuppressWarnings({ "unchecked", "rawtypes" })
public static WebParameterHandler body(final WebAnnotationMethodHandlerAdapter adapter, final Parameter parameter, final Annotation annotation) {
    final boolean required = ((RequestBody) annotation).required();
    final String parameterName = parameter.getName();
    final Class parameterClass = parameter.getType();
    final DataType dataType = DataTypes.getDataType(parameterClass);
    return // 
    WebParameterHandler.function(// 
    parameterName, (request, response) -> {
        try {
            final HttpInputMessage inputMessage = new ServletServerHttpRequest(request);
            MediaType contentType = MediaTypeUtil.getContentType(request);
            if (contentType == null) {
                contentType = MediaType.APPLICATION_FORM_URLENCODED;
            }
            if (!MediaType.APPLICATION_FORM_URLENCODED.includes(contentType) && !MediaType.MULTIPART_FORM_DATA.includes(contentType)) {
                contentType = MediaTypeUtil.getRequestMediaType(request, adapter.mediaTypes, adapter.mediaTypeOrder, adapter.urlPathHelper, adapter.parameterName, adapter.defaultMediaType, "");
            }
            final HttpHeaders headers = inputMessage.getHeaders();
            if (contentType == null) {
                final StringBuilder builder = new StringBuilder(ClassUtils.getShortName(parameterClass));
                final String paramName = parameterName;
                if (paramName != null) {
                    builder.append(' ');
                    builder.append(paramName);
                }
                throw new HttpMediaTypeNotSupportedException("Cannot extract @RequestBody parameter (" + builder.toString() + "): no Content-Type found");
            } else {
                HttpServletUtils.setContentTypeWithCharset(headers, contentType);
            }
            final List<MediaType> allSupportedMediaTypes = new ArrayList<>();
            if (adapter.messageConverters != null) {
                for (final HttpMessageConverter<?> messageConverter : adapter.messageConverters) {
                    allSupportedMediaTypes.addAll(messageConverter.getSupportedMediaTypes());
                    if (messageConverter.canRead(parameterClass, contentType)) {
                        return messageConverter.read(parameterClass, inputMessage);
                    }
                }
                String body = null;
                if (MediaType.APPLICATION_FORM_URLENCODED.includes(contentType)) {
                    Charset charset = contentType.getCharSet();
                    if (charset == null) {
                        charset = StandardCharsets.UTF_8;
                    }
                    final String urlBody = FileCopyUtils.copyToString(new InputStreamReader(inputMessage.getBody(), charset));
                    final String[] pairs = StringUtils.tokenizeToStringArray(urlBody, "&");
                    final MultiValueMap<String, String> values = new LinkedMultiValueMap<>(pairs.length);
                    for (final String pair : pairs) {
                        final int idx = pair.indexOf('=');
                        if (idx == -1) {
                            values.add(URLDecoder.decode(pair, charset.name()), null);
                        } else {
                            final String name = URLDecoder.decode(pair.substring(0, idx), charset.name());
                            final String value = URLDecoder.decode(pair.substring(idx + 1), charset.name());
                            values.add(name, value);
                        }
                    }
                    body = values.getFirst("body");
                } else if (request instanceof MultipartHttpServletRequest) {
                    final MultipartHttpServletRequest multiPartRequest = (MultipartHttpServletRequest) request;
                    final MultipartFile bodyFile = multiPartRequest.getFile("body");
                    contentType = MediaTypeUtil.getRequestMediaType(request, adapter.mediaTypes, adapter.mediaTypeOrder, adapter.urlPathHelper, adapter.parameterName, adapter.defaultMediaType, bodyFile.getOriginalFilename());
                    HttpServletUtils.setContentTypeWithCharset(headers, contentType);
                    final HttpInputMessage newInputMessage = new HttpInputMessage() {

                        @Override
                        public InputStream getBody() throws IOException {
                            return bodyFile.getInputStream();
                        }

                        @Override
                        public HttpHeaders getHeaders() {
                            return headers;
                        }
                    };
                    for (final HttpMessageConverter<?> messageConverter : adapter.messageConverters) {
                        if (messageConverter.canRead(parameterClass, contentType)) {
                            return messageConverter.read(parameterClass, newInputMessage);
                        }
                    }
                }
                if (body == null) {
                    body = request.getParameter("body");
                }
                if (body != null) {
                    contentType = MediaTypeUtil.getRequestMediaType(request, adapter.mediaTypes, adapter.mediaTypeOrder, adapter.urlPathHelper, adapter.parameterName, adapter.defaultMediaType, "");
                    HttpServletUtils.setContentTypeWithCharset(headers, contentType);
                    byte[] bytes;
                    bytes = body.getBytes();
                    final InputStream bodyIn = new ByteArrayInputStream(bytes);
                    final HttpInputMessage newInputMessage = new HttpInputMessage() {

                        @Override
                        public InputStream getBody() throws IOException {
                            return bodyIn;
                        }

                        @Override
                        public HttpHeaders getHeaders() {
                            return headers;
                        }
                    };
                    for (final HttpMessageConverter<?> messageConverter : adapter.messageConverters) {
                        if (messageConverter.canRead(parameterClass, contentType)) {
                            return messageConverter.read(parameterClass, newInputMessage);
                        }
                    }
                }
            }
            throw new HttpMediaTypeNotSupportedException(contentType, allSupportedMediaTypes);
        } catch (final Exception e) {
            return Exceptions.throwUncheckedException(e);
        }
    }, // 
    dataType, // 
    required, // 
    null);
}
Also used : ServletServerHttpRequest(org.springframework.http.server.ServletServerHttpRequest) HttpHeaders(org.springframework.http.HttpHeaders) LinkedMultiValueMap(org.springframework.util.LinkedMultiValueMap) ArrayList(java.util.ArrayList) HttpMediaTypeNotSupportedException(org.springframework.web.HttpMediaTypeNotSupportedException) MultipartFile(org.springframework.web.multipart.MultipartFile) HttpMessageConverter(org.springframework.http.converter.HttpMessageConverter) DataType(com.revolsys.datatype.DataType) MediaType(org.springframework.http.MediaType) RequestBody(org.springframework.web.bind.annotation.RequestBody) HttpInputMessage(org.springframework.http.HttpInputMessage) InputStreamReader(java.io.InputStreamReader) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) Charset(java.nio.charset.Charset) IOException(java.io.IOException) WrappedException(com.revolsys.util.WrappedException) IOException(java.io.IOException) HttpMediaTypeNotSupportedException(org.springframework.web.HttpMediaTypeNotSupportedException) ByteArrayInputStream(java.io.ByteArrayInputStream) MultipartHttpServletRequest(org.springframework.web.multipart.MultipartHttpServletRequest)

Example 73 with ServletServerHttpRequest

use of org.springframework.http.server.ServletServerHttpRequest in project spring-integration by spring-projects.

the class HttpRequestHandlingMessagingGateway method handleRequest.

/**
 * Handles the HTTP request by generating a Message and sending it to the request channel. If this gateway's
 * 'expectReply' property is true, it will also generate a response from the reply Message once received. That
 * response will be written by the {@link HttpMessageConverter}s.
 */
public final void handleRequest(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException {
    Object responseContent = null;
    Message<?> responseMessage;
    final ServletServerHttpRequest request = new ServletServerHttpRequest(servletRequest);
    final ServletServerHttpResponse response = new ServletServerHttpResponse(servletResponse);
    try {
        responseMessage = super.doHandleRequest(servletRequest, servletResponse);
        if (responseMessage != null) {
            responseContent = setupResponseAndConvertReply(response, responseMessage);
        }
    } catch (Exception e) {
        responseContent = handleExceptionInternal(e);
    }
    if (responseContent != null) {
        if (responseContent instanceof HttpStatus) {
            response.setStatusCode((HttpStatus) responseContent);
        } else {
            if (responseContent instanceof ResponseEntity) {
                ResponseEntity<?> responseEntity = (ResponseEntity<?>) responseContent;
                responseContent = responseEntity.getBody();
                response.setStatusCode(responseEntity.getStatusCode());
                HttpHeaders outputHeaders = response.getHeaders();
                HttpHeaders entityHeaders = responseEntity.getHeaders();
                if (!entityHeaders.isEmpty()) {
                    entityHeaders.entrySet().stream().filter(entry -> !outputHeaders.containsKey(entry.getKey())).forEach(entry -> outputHeaders.put(entry.getKey(), entry.getValue()));
                }
            }
            if (responseContent != null) {
                writeResponse(responseContent, response, request.getHeaders().getAccept());
            } else {
                response.flush();
            }
        }
    } else {
        setStatusCodeIfNeeded(response);
    }
}
Also used : MessagingException(org.springframework.messaging.MessagingException) ServletException(javax.servlet.ServletException) HttpHeaders(org.springframework.http.HttpHeaders) MediaType(org.springframework.http.MediaType) HttpServletResponse(javax.servlet.http.HttpServletResponse) MultiValueMap(org.springframework.util.MultiValueMap) IOException(java.io.IOException) HttpStatus(org.springframework.http.HttpStatus) List(java.util.List) HttpServletRequest(javax.servlet.http.HttpServletRequest) ServletServerHttpResponse(org.springframework.http.server.ServletServerHttpResponse) ServletServerHttpRequest(org.springframework.http.server.ServletServerHttpRequest) HttpMessageConverter(org.springframework.http.converter.HttpMessageConverter) CollectionUtils(org.springframework.util.CollectionUtils) MultipartAwareFormHttpMessageConverter(org.springframework.integration.http.converter.MultipartAwareFormHttpMessageConverter) ResponseEntity(org.springframework.http.ResponseEntity) Message(org.springframework.messaging.Message) Collections(java.util.Collections) HttpRequestHandler(org.springframework.web.HttpRequestHandler) ServletServerHttpRequest(org.springframework.http.server.ServletServerHttpRequest) HttpHeaders(org.springframework.http.HttpHeaders) ResponseEntity(org.springframework.http.ResponseEntity) HttpStatus(org.springframework.http.HttpStatus) ServletServerHttpResponse(org.springframework.http.server.ServletServerHttpResponse) MessagingException(org.springframework.messaging.MessagingException) ServletException(javax.servlet.ServletException) IOException(java.io.IOException)

Example 74 with ServletServerHttpRequest

use of org.springframework.http.server.ServletServerHttpRequest in project fastjson by alibaba.

the class JSONPResponseBodyAdvice method beforeBodyWrite.

public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
    ResponseJSONP responseJsonp = returnType.getMethodAnnotation(ResponseJSONP.class);
    if (responseJsonp == null) {
        responseJsonp = returnType.getContainingClass().getAnnotation(ResponseJSONP.class);
    }
    HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest();
    String callbackMethodName = servletRequest.getParameter(responseJsonp.callback());
    if (!IOUtils.isValidJsonpQueryParam(callbackMethodName)) {
        if (logger.isDebugEnabled()) {
            logger.debug("Invalid jsonp parameter value:" + callbackMethodName);
        }
        callbackMethodName = null;
    }
    JSONPObject jsonpObject = new JSONPObject(callbackMethodName);
    jsonpObject.addParameter(body);
    beforeBodyWriteInternal(jsonpObject, selectedContentType, returnType, request, response);
    return jsonpObject;
}
Also used : HttpServletRequest(javax.servlet.http.HttpServletRequest) ServletServerHttpRequest(org.springframework.http.server.ServletServerHttpRequest) JSONPObject(com.alibaba.fastjson.JSONPObject) ResponseJSONP(com.alibaba.fastjson.support.spring.annotation.ResponseJSONP)

Example 75 with ServletServerHttpRequest

use of org.springframework.http.server.ServletServerHttpRequest in project spring-boot by spring-projects.

the class UrlHandlerMapperTests method ignoresDifferentUrl.

@Test
void ignoresDifferentUrl() {
    UrlHandlerMapper mapper = new UrlHandlerMapper("/tunnel", this.handler);
    HttpServletRequest servletRequest = new MockHttpServletRequest("GET", "/tunnel/other");
    ServerHttpRequest request = new ServletServerHttpRequest(servletRequest);
    assertThat(mapper.getHandler(request)).isNull();
}
Also used : HttpServletRequest(jakarta.servlet.http.HttpServletRequest) MockHttpServletRequest(org.springframework.mock.web.MockHttpServletRequest) ServletServerHttpRequest(org.springframework.http.server.ServletServerHttpRequest) MockHttpServletRequest(org.springframework.mock.web.MockHttpServletRequest) ServletServerHttpRequest(org.springframework.http.server.ServletServerHttpRequest) ServerHttpRequest(org.springframework.http.server.ServerHttpRequest) Test(org.junit.jupiter.api.Test)

Aggregations

ServletServerHttpRequest (org.springframework.http.server.ServletServerHttpRequest)111 Test (org.junit.jupiter.api.Test)39 MockHttpServletRequest (org.springframework.web.testfixture.servlet.MockHttpServletRequest)39 HttpRequest (org.springframework.http.HttpRequest)31 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)28 ServletServerHttpResponse (org.springframework.http.server.ServletServerHttpResponse)22 MockHttpServletRequest (org.springframework.mock.web.MockHttpServletRequest)17 HttpServletRequest (javax.servlet.http.HttpServletRequest)14 ServerHttpRequest (org.springframework.http.server.ServerHttpRequest)13 HttpServletRequest (jakarta.servlet.http.HttpServletRequest)10 IOException (java.io.IOException)8 ServerHttpResponse (org.springframework.http.server.ServerHttpResponse)8 BeforeEach (org.junit.jupiter.api.BeforeEach)7 HttpHeaders (org.springframework.http.HttpHeaders)7 MediaType (org.springframework.http.MediaType)7 MockHttpServletResponse (org.springframework.mock.web.MockHttpServletResponse)7 HttpInputMessage (org.springframework.http.HttpInputMessage)6 HttpServletResponse (javax.servlet.http.HttpServletResponse)5 URI (java.net.URI)4 ResponseEntity (org.springframework.http.ResponseEntity)4