Skip to content

Commit

Permalink
Support request/response wrappers in JettyHttpHandlerAdapter
Browse files Browse the repository at this point in the history
This commit makes JettyServerHttpRequest aware of
HttpServletRequestWrapper, and JettyServerHttpResponse aware of
HttpServletResponseWrapper.

Closes spring-projectsgh-27146
  • Loading branch information
poutsma authored and lxbzmy committed Mar 26, 2022
1 parent bc369f3 commit 04740b0
Showing 1 changed file with 40 additions and 4 deletions.
Expand Up @@ -24,7 +24,9 @@
import javax.servlet.AsyncContext;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

import org.eclipse.jetty.http.HttpFields;
import org.eclipse.jetty.server.HttpOutput;
Expand Down Expand Up @@ -98,10 +100,28 @@ private static final class JettyServerHttpRequest extends ServletServerHttpReque
super(createHeaders(request), request, asyncContext, servletPath, bufferFactory, bufferSize);
}

private static MultiValueMap<String, String> createHeaders(HttpServletRequest request) {
HttpFields fields = ((Request) request).getMetaData().getFields();
private static MultiValueMap<String, String> createHeaders(HttpServletRequest servletRequest) {
Request request = getRequest(servletRequest);
HttpFields fields = request.getMetaData().getFields();
return new JettyHeadersAdapter(fields);
}

private static Request getRequest(HttpServletRequest request) {
if (request instanceof Request) {
return (Request) request;
}
else if (request instanceof HttpServletRequestWrapper) {
HttpServletRequestWrapper wrapper = (HttpServletRequestWrapper) request;
HttpServletRequest wrappedRequest = (HttpServletRequest) wrapper.getRequest();
return getRequest(wrappedRequest);
}
else {
throw new IllegalArgumentException("Cannot convert [" + request.getClass() +
"] to org.eclipse.jetty.server.Request");
}
}


}


Expand Down Expand Up @@ -141,11 +161,27 @@ private static final class JettyServerHttpResponse extends BaseJettyServerHttpRe
super(createHeaders(response), response, asyncContext, bufferFactory, bufferSize, request);
}

private static HttpHeaders createHeaders(HttpServletResponse response) {
HttpFields fields = ((Response) response).getHttpFields();
private static HttpHeaders createHeaders(HttpServletResponse servletResponse) {
Response response = getResponse(servletResponse);
HttpFields fields = response.getHttpFields();
return new HttpHeaders(new JettyHeadersAdapter(fields));
}

private static Response getResponse(HttpServletResponse response) {
if (response instanceof Response) {
return (Response) response;
}
else if (response instanceof HttpServletResponseWrapper) {
HttpServletResponseWrapper wrapper = (HttpServletResponseWrapper) response;
HttpServletResponse wrappedResponse = (HttpServletResponse) wrapper.getResponse();
return getResponse(wrappedResponse);
}
else {
throw new IllegalArgumentException("Cannot convert [" + response.getClass() +
"] to org.eclipse.jetty.server.Response");
}
}

@Override
protected void applyHeaders() {
HttpServletResponse response = getNativeResponse();
Expand Down

0 comments on commit 04740b0

Please sign in to comment.