Skip to content

Commit 9cbb5af

Browse files
committed
Support request/response wrappers in JettyHttpHandlerAdapter
This commit makes JettyServerHttpRequest aware of HttpServletRequestWrapper, and JettyServerHttpResponse aware of HttpServletResponseWrapper. Closes gh-27146
1 parent fed1a42 commit 9cbb5af

File tree

1 file changed

+40
-4
lines changed

1 file changed

+40
-4
lines changed

spring-web/src/main/java/org/springframework/http/server/reactive/JettyHttpHandlerAdapter.java

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
import javax.servlet.AsyncContext;
2525
import javax.servlet.ServletResponse;
2626
import javax.servlet.http.HttpServletRequest;
27+
import javax.servlet.http.HttpServletRequestWrapper;
2728
import javax.servlet.http.HttpServletResponse;
29+
import javax.servlet.http.HttpServletResponseWrapper;
2830

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

101-
private static MultiValueMap<String, String> createHeaders(HttpServletRequest request) {
102-
HttpFields fields = ((Request) request).getMetaData().getFields();
103+
private static MultiValueMap<String, String> createHeaders(HttpServletRequest servletRequest) {
104+
Request request = getRequest(servletRequest);
105+
HttpFields fields = request.getMetaData().getFields();
103106
return new JettyHeadersAdapter(fields);
104107
}
108+
109+
private static Request getRequest(HttpServletRequest request) {
110+
if (request instanceof Request) {
111+
return (Request) request;
112+
}
113+
else if (request instanceof HttpServletRequestWrapper) {
114+
HttpServletRequestWrapper wrapper = (HttpServletRequestWrapper) request;
115+
HttpServletRequest wrappedRequest = (HttpServletRequest) wrapper.getRequest();
116+
return getRequest(wrappedRequest);
117+
}
118+
else {
119+
throw new IllegalArgumentException("Cannot convert [" + request.getClass() +
120+
"] to org.eclipse.jetty.server.Request");
121+
}
122+
}
123+
124+
105125
}
106126

107127

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

144-
private static HttpHeaders createHeaders(HttpServletResponse response) {
145-
HttpFields fields = ((Response) response).getHttpFields();
164+
private static HttpHeaders createHeaders(HttpServletResponse servletResponse) {
165+
Response response = getResponse(servletResponse);
166+
HttpFields fields = response.getHttpFields();
146167
return new HttpHeaders(new JettyHeadersAdapter(fields));
147168
}
148169

170+
private static Response getResponse(HttpServletResponse response) {
171+
if (response instanceof Response) {
172+
return (Response) response;
173+
}
174+
else if (response instanceof HttpServletResponseWrapper) {
175+
HttpServletResponseWrapper wrapper = (HttpServletResponseWrapper) response;
176+
HttpServletResponse wrappedResponse = (HttpServletResponse) wrapper.getResponse();
177+
return getResponse(wrappedResponse);
178+
}
179+
else {
180+
throw new IllegalArgumentException("Cannot convert [" + response.getClass() +
181+
"] to org.eclipse.jetty.server.Response");
182+
}
183+
}
184+
149185
@Override
150186
protected void applyHeaders() {
151187
HttpServletResponse response = getNativeResponse();

0 commit comments

Comments
 (0)