Support request/response wrappers in JettyHttpHandlerAdapter
This commit makes JettyServerHttpRequest aware of HttpServletRequestWrapper, and JettyServerHttpResponse aware of HttpServletResponseWrapper. Closes gh-27146
This commit is contained in:
parent
fed1a426b6
commit
9cbb5af622
|
@ -24,7 +24,9 @@ import java.nio.charset.Charset;
|
||||||
import javax.servlet.AsyncContext;
|
import javax.servlet.AsyncContext;
|
||||||
import javax.servlet.ServletResponse;
|
import javax.servlet.ServletResponse;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.servlet.http.HttpServletResponseWrapper;
|
||||||
|
|
||||||
import org.eclipse.jetty.http.HttpFields;
|
import org.eclipse.jetty.http.HttpFields;
|
||||||
import org.eclipse.jetty.server.HttpOutput;
|
import org.eclipse.jetty.server.HttpOutput;
|
||||||
|
@ -98,10 +100,28 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter {
|
||||||
super(createHeaders(request), request, asyncContext, servletPath, bufferFactory, bufferSize);
|
super(createHeaders(request), request, asyncContext, servletPath, bufferFactory, bufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MultiValueMap<String, String> createHeaders(HttpServletRequest request) {
|
private static MultiValueMap<String, String> createHeaders(HttpServletRequest servletRequest) {
|
||||||
HttpFields fields = ((Request) request).getMetaData().getFields();
|
Request request = getRequest(servletRequest);
|
||||||
|
HttpFields fields = request.getMetaData().getFields();
|
||||||
return new JettyHeadersAdapter(fields);
|
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,11 +161,27 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter {
|
||||||
super(createHeaders(response), response, asyncContext, bufferFactory, bufferSize, request);
|
super(createHeaders(response), response, asyncContext, bufferFactory, bufferSize, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HttpHeaders createHeaders(HttpServletResponse response) {
|
private static HttpHeaders createHeaders(HttpServletResponse servletResponse) {
|
||||||
HttpFields fields = ((Response) response).getHttpFields();
|
Response response = getResponse(servletResponse);
|
||||||
|
HttpFields fields = response.getHttpFields();
|
||||||
return new HttpHeaders(new JettyHeadersAdapter(fields));
|
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
|
@Override
|
||||||
protected void applyHeaders() {
|
protected void applyHeaders() {
|
||||||
HttpServletResponse response = getNativeResponse();
|
HttpServletResponse response = getNativeResponse();
|
||||||
|
|
Loading…
Reference in New Issue