Alon Bar-Lev has uploaded a new change for review. Change subject: utils: ForwardServlet: enable accepting components before query parameters ......................................................................
utils: ForwardServlet: enable accepting components before query parameters Example: http://host/api/events;max=2 As more edge conditions, apply exceptional style. Change-Id: Icfc5fd7bf98d3461ce8251c301de310237e0507c Signed-off-by: Alon Bar-Lev <alo...@redhat.com> --- M backend/manager/modules/root/src/main/webapp/WEB-INF/web.xml M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/ForwardServlet.java 2 files changed, 26 insertions(+), 20 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/35/21335/1 diff --git a/backend/manager/modules/root/src/main/webapp/WEB-INF/web.xml b/backend/manager/modules/root/src/main/webapp/WEB-INF/web.xml index 448a4c7..ea237dc 100644 --- a/backend/manager/modules/root/src/main/webapp/WEB-INF/web.xml +++ b/backend/manager/modules/root/src/main/webapp/WEB-INF/web.xml @@ -110,7 +110,7 @@ </init-param> <init-param> <param-name>uri</param-name> - <param-value>/</param-value> + <param-value></param-value> </init-param> </servlet> <servlet-mapping> diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/ForwardServlet.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/ForwardServlet.java index a662e60..5e7ed0c 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/ForwardServlet.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/ForwardServlet.java @@ -116,29 +116,35 @@ @Override protected void service(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { - final ServletContext forwardContext = getServletContext().getContext(targetContext); - if (forwardContext != null) { - String forwardUri = uri; - if (request.getPathInfo() != null) { - forwardUri += request.getPathInfo(); + + try { + if (!request.getRequestURI().startsWith(request.getContextPath() + request.getServletPath())) { + throw new RuntimeException("Unexpected request URI " + request.getRequestURI() + + " with servlet path " + request.getContextPath() + request.getServletPath()); } + + final ServletContext forwardContext = getServletContext().getContext(targetContext); + if (forwardContext == null) { + throw new RuntimeException("Unable to determine forward context for " + targetContext); + } + + final String forwardUri = uri + request.getRequestURI().substring( + request.getContextPath().length() + request.getServletPath().length()); final RequestDispatcher dispatcher = forwardContext.getRequestDispatcher(forwardUri); - if (dispatcher != null) { - for (String initParam : Collections.list(getInitParameterNames())) { - if (initParam.startsWith(ATTR_PREF)) { - request.setAttribute(initParam.replaceFirst(ATTR_PREF, ""), getInitParameter(initParam)); - } - } - dispatcher.forward(request, response); - } else { - log.error("Unable to determine dispatcher"); - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, - "unable to determine dispatcher"); + if (dispatcher == null) { + throw new RuntimeException("Unable to determine dispatcher for " + forwardUri); } - } else { - log.error("Unable to determine forwarding context"); + + for (String initParam : Collections.list(getInitParameterNames())) { + if (initParam.startsWith(ATTR_PREF)) { + request.setAttribute(initParam.replaceFirst(ATTR_PREF, ""), getInitParameter(initParam)); + } + } + dispatcher.forward(request, response); + } catch(Exception e) { + log.error("Forward failed", e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, - "unable to determine forward context"); + e.getMessage()); } } -- To view, visit http://gerrit.ovirt.org/21335 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Icfc5fd7bf98d3461ce8251c301de310237e0507c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alon Bar-Lev <alo...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches