This commit is contained in:
Oleg Zhurakousky
2023-06-28 18:24:26 +02:00
parent f53b49e5a0
commit 28bedce46e
2 changed files with 17 additions and 23 deletions

View File

@@ -146,15 +146,17 @@ public final class ProxyMvc {
AsyncContext asyncContext = request.getAsyncContext();
if (asyncContext != null) {
filterChain = new ProxyFilterChain(this.dispatcher);
((ProxyAsyncContext) asyncContext).addDispatchHandler(() -> {
try {
new ProxyFilterChain(this.dispatcher).doFilter(request, response);
asyncContext.complete();
}
catch (Exception e) {
throw new IllegalStateException(e);
}
});
if (asyncContext instanceof ProxyAsyncContext proxyAsyncContext) {
proxyAsyncContext.addDispatchHandler(() -> {
try {
new ProxyFilterChain(this.dispatcher).doFilter(request, response);
asyncContext.complete();
}
catch (Exception e) {
throw new IllegalStateException(e);
}
});
}
}
if (latch != null) {
@@ -262,20 +264,12 @@ public final class ProxyMvc {
}
else {
this.delegateServlet.service(request, response);
if (((HttpServletResponse) response).getStatus() != HttpStatus.OK.value() && request instanceof ProxyHttpServletRequest) {
((HttpServletRequest) request).setAttribute(RequestDispatcher.ERROR_STATUS_CODE, ((HttpServletResponse) response).getStatus());
this.setErrorMessageAttribute((ProxyHttpServletRequest) request, (ProxyHttpServletResponse) response, null);
((HttpServletRequest) request).setAttribute(RequestDispatcher.ERROR_REQUEST_URI, ((HttpServletRequest) request).getRequestURI());
((ProxyHttpServletRequest) request).setRequestURI("/error");
this.delegateServlet.service(request, response);
}
}
}
catch (Exception e) {
if (request instanceof ProxyHttpServletRequest) {
((HttpServletRequest) request).setAttribute(RequestDispatcher.ERROR_STATUS_CODE, HttpStatus.INTERNAL_SERVER_ERROR);
this.setErrorMessageAttribute((ProxyHttpServletRequest) request, (ProxyHttpServletResponse) response, e);
((HttpServletRequest) request).setAttribute(RequestDispatcher.ERROR_STATUS_CODE, HttpStatus.INTERNAL_SERVER_ERROR.value());
this.setErrorMessageAttribute((HttpServletRequest) request, (HttpServletResponse) response, e);
((HttpServletRequest) request).setAttribute(RequestDispatcher.ERROR_EXCEPTION_TYPE, e);
((HttpServletRequest) request).setAttribute(RequestDispatcher.ERROR_REQUEST_URI, ((HttpServletRequest) request).getRequestURI());
((ProxyHttpServletRequest) request).setRequestURI("/error");
@@ -287,12 +281,12 @@ public final class ProxyMvc {
}
}
private void setErrorMessageAttribute(ProxyHttpServletRequest request, ProxyHttpServletResponse response, Exception exception) {
private void setErrorMessageAttribute(HttpServletRequest request, HttpServletResponse response, Exception exception) {
if (exception != null && StringUtils.hasText(exception.getMessage())) {
request.setAttribute(RequestDispatcher.ERROR_MESSAGE, exception.getMessage());
}
else if (StringUtils.hasText(response.getErrorMessage())) {
request.setAttribute(RequestDispatcher.ERROR_MESSAGE, response.getErrorMessage());
else if (response instanceof ProxyHttpServletResponse proxyResponse && StringUtils.hasText(proxyResponse.getErrorMessage())) {
request.setAttribute(RequestDispatcher.ERROR_MESSAGE, proxyResponse.getErrorMessage());
}
else {
request.setAttribute(RequestDispatcher.ERROR_MESSAGE, HttpStatus.valueOf(response.getStatus()).getReasonPhrase());

View File

@@ -115,7 +115,7 @@ public class ProxyServletContext implements ServletContext {
@Override
public InputStream getResourceAsStream(String path) {
throw new UnsupportedOperationException("This ServletContext does not represent a running web container");
return null;
}
@Override