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;
}
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);
}
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);
}
}
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;
}
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();
}
Aggregations