diff --git a/src/main/java/org/olat/core/dispatcher/DispatcherModule.java b/src/main/java/org/olat/core/dispatcher/DispatcherModule.java index 29317144d38c0019bbbe7f50cf8a96896b62d2fa..08526f9469bb5c958beafd2d054009b69d2873e4 100644 --- a/src/main/java/org/olat/core/dispatcher/DispatcherModule.java +++ b/src/main/java/org/olat/core/dispatcher/DispatcherModule.java @@ -164,6 +164,19 @@ public class DispatcherModule { log.error("Send 404 failed: url=" + url, e); } } + + /** + * Send a 404 without log. + * + * @param response The HTTP response + */ + public static final void sendNotFound(HttpServletResponse response) { + try { + response.sendError(HttpServletResponse.SC_NOT_FOUND); + } catch (IOException e) { + // + } + } /** * Sends a HTTP 403 response. @@ -178,6 +191,19 @@ public class DispatcherModule { log.error("Send 403 failed: url=" + url, e); } } + + /** + * Send a 403 error without log. + * + * @param response The HTTP response + */ + public static final void sendForbidden(HttpServletResponse response) { + try { + response.sendError(HttpServletResponse.SC_FORBIDDEN); + } catch (IOException e) { + // + } + } /** * Sends a HTTP 400 response. @@ -207,6 +233,14 @@ public class DispatcherModule { } } + public static final void sendServerError(HttpServletResponse response) { + try { + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } catch (IOException e) { + // + } + } + /** * Sent to standard 503 if not available * @param response diff --git a/src/main/java/org/olat/core/servlets/OpenOLATServlet.java b/src/main/java/org/olat/core/servlets/OpenOLATServlet.java index 4aba36b20e4cdebc9c27e0b4d6a99540860718bc..33c7f0b5074b7caed5371e3ee9a8fb804827732b 100644 --- a/src/main/java/org/olat/core/servlets/OpenOLATServlet.java +++ b/src/main/java/org/olat/core/servlets/OpenOLATServlet.java @@ -128,8 +128,7 @@ public class OpenOLATServlet extends HttpServlet { } @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { + protected void service(HttpServletRequest req, HttpServletResponse resp) { Tracing.setHttpRequest(req); ThreadLocalUserActivityLoggerInstaller.initUserActivityLogger(req); @@ -139,7 +138,7 @@ public class OpenOLATServlet extends HttpServlet { sessionStatsManager.incrementConcurrentCounter(); } - try{ + try { final String method = req.getMethod(); if (method.equals(METHOD_PROPFIND)) { @@ -160,6 +159,9 @@ public class OpenOLATServlet extends HttpServlet { super.service(req, resp); } + } catch (ServletException | IOException e) { + log.error("", e); + DispatcherModule.sendServerError(resp); } finally { if(sessionStatsManager != null) { sessionStatsManager.decrementConcurrentCounter(); @@ -176,13 +178,18 @@ public class OpenOLATServlet extends HttpServlet { @Override protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String subContext = DispatcherModule.getFirstPath(req); - if("/".equals(subContext)) { - webDAVDispatcher.doRootOptions(req, resp); - } else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) { - webDAVDispatcher.doWebdavOptions(req, resp); - } else { - super.doOptions(req, resp); + try { + String subContext = DispatcherModule.getFirstPath(req); + if("/".equals(subContext)) { + webDAVDispatcher.doRootOptions(req, resp); + } else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) { + webDAVDispatcher.doWebdavOptions(req, resp); + } else { + super.doOptions(req, resp); + } + } catch (ServletException | IOException e) { + log.error("", e); + DispatcherModule.sendServerError(resp); } } @@ -196,9 +203,13 @@ public class OpenOLATServlet extends HttpServlet { * @throws IOException */ @Override - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - executeUserRequest(request, response); + public void doGet(HttpServletRequest request, HttpServletResponse response) { + try { + executeUserRequest(request, response); + } catch (ServletException | IOException e) { + log.error("", e); + DispatcherModule.sendServerError(response); + } } /** @@ -211,33 +222,50 @@ public class OpenOLATServlet extends HttpServlet { * @throws IOException */ @Override - public void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - executeUserRequest(request, response); + public void doPost(HttpServletRequest request, HttpServletResponse response) { + try { + executeUserRequest(request, response); + } catch (ServletException | IOException e) { + log.error("", e); + DispatcherModule.sendServerError(response); + } } @Override - protected void doPut(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { - webDAVDispatcher.execute(req, resp); + protected void doPut(HttpServletRequest req, HttpServletResponse resp) { + try { + webDAVDispatcher.execute(req, resp); + } catch (ServletException | IOException e) { + log.error("", e); + DispatcherModule.sendServerError(resp); + } } @Override protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - webDAVDispatcher.execute(req, resp); + try { + webDAVDispatcher.execute(req, resp); + } catch (ServletException | IOException e) { + log.error("", e); + DispatcherModule.sendServerError(resp); + } } @Override - protected void doHead(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { - String subContext = DispatcherModule.getFirstPath(req); - if("/".equals(subContext)) { - webDAVDispatcher.execute(req, resp); - } else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) { - webDAVDispatcher.execute(req, resp); - } else { - executeUserRequest(req, resp); + protected void doHead(HttpServletRequest req, HttpServletResponse resp) { + try { + String subContext = DispatcherModule.getFirstPath(req); + if("/".equals(subContext)) { + webDAVDispatcher.execute(req, resp); + } else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) { + webDAVDispatcher.execute(req, resp); + } else { + executeUserRequest(req, resp); + } + } catch (ServletException | IOException e) { + log.error("", e); + DispatcherModule.sendServerError(resp); } } @@ -283,11 +311,11 @@ public class OpenOLATServlet extends HttpServlet { response.sendRedirect(redirectUri); ServletUtil.setCacheHeaders(response, ServletUtil.CACHE_ONE_DAY); } else { - response.sendError(HttpServletResponse.SC_NOT_FOUND); + DispatcherModule.sendNotFound(response); ServletUtil.setCacheHeaders(response, ServletUtil.CACHE_ONE_DAY); } } else { - response.sendError(HttpServletResponse.SC_NOT_FOUND); + DispatcherModule.sendNotFound(response); ServletUtil.setCacheHeaders(response, ServletUtil.CACHE_ONE_DAY); } } diff --git a/src/main/java/org/olat/core/servlets/StaticServlet.java b/src/main/java/org/olat/core/servlets/StaticServlet.java index 319696843b400967df81ce3b18e1b9a798d1576a..c2472904d8355c73855c369fa1fcf6112762d0e5 100644 --- a/src/main/java/org/olat/core/servlets/StaticServlet.java +++ b/src/main/java/org/olat/core/servlets/StaticServlet.java @@ -32,6 +32,7 @@ import javax.servlet.http.HttpServletResponse; import org.olat.admin.sysinfo.manager.CustomStaticFolderManager; import org.olat.core.CoreSpringFactory; +import org.olat.core.dispatcher.DispatcherModule; import org.olat.core.gui.media.FileMediaResource; import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.media.ServletUtil; @@ -59,30 +60,32 @@ public class StaticServlet extends HttpServlet { public static final String NOVERSION = "_noversion_"; @Override - protected void service(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { + protected void service(HttpServletRequest req, HttpServletResponse resp) { String userAgent = req.getHeader("User-Agent"); if(userAgent != null && userAgent.indexOf("BitKinex") >= 0) { //BitKinex isn't allow to see this context - resp.sendError(HttpServletResponse.SC_FORBIDDEN); + DispatcherModule.sendForbidden(resp); } else { - super.service(req, resp); + try { + super.service(req, resp); + } catch (ServletException | IOException e) { + log.error("", e); + } } } @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + protected void doGet(HttpServletRequest request, HttpServletResponse response) { final String pathInfo = request.getPathInfo(); if (pathInfo == null) { // huh? What's this, send not found, don't know what to do here - response.sendError(HttpServletResponse.SC_NOT_FOUND); + DispatcherModule.sendNotFound(response); } else if (pathInfo.indexOf(NOVERSION) != -1) { // no version provided - only remove mapper String staticRelPath = pathInfo.substring(NOVERSION.length() + 1, pathInfo.length()); String normalizedRelPath = ServletUtil.normalizePath(staticRelPath); if (normalizedRelPath == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND); + DispatcherModule.sendNotFound(response); } else if(normalizedRelPath.endsWith("transparent.gif")){ deliverStatic(request, response, pathInfo, normalizedRelPath, true); } else { @@ -95,13 +98,13 @@ public class StaticServlet extends HttpServlet { File file = new File(folderManager.getRootFile(), staticRelPath); if(file.exists()) { if(file.isDirectory()) { - response.sendError(HttpServletResponse.SC_FORBIDDEN); + DispatcherModule.sendForbidden(response); } else { MediaResource resource = new FileMediaResource(file); ServletUtil.serveResource(request, response, resource); } } else { - response.sendError(HttpServletResponse.SC_NOT_FOUND); + DispatcherModule.sendNotFound(response); } } else { // version provided - remove it @@ -111,20 +114,19 @@ public class StaticServlet extends HttpServlet { String staticRelPath = pathInfo.substring(start, end); String normalizedRelPath = ServletUtil.normalizePath(staticRelPath); if (normalizedRelPath == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND); + DispatcherModule.sendNotFound(response); } else { boolean expiration = !Settings.isDebuging(); deliverStatic(request, response, pathInfo, normalizedRelPath, expiration); } } else { - response.sendError(HttpServletResponse.SC_NOT_FOUND); + DispatcherModule.sendNotFound(response); } } } private void deliverStatic(HttpServletRequest request, HttpServletResponse response, - String pathInfo, String normalizedRelPath, boolean expiration) - throws IOException { + String pathInfo, String normalizedRelPath, boolean expiration) { boolean notFound = false; // create the file from the path @@ -175,10 +177,10 @@ public class StaticServlet extends HttpServlet { } if(notFound) { - response.sendError(HttpServletResponse.SC_NOT_FOUND); + DispatcherModule.sendNotFound(response); } else if(staticFile.isDirectory()) { //directory listing is forbidden - response.sendError(HttpServletResponse.SC_FORBIDDEN); + DispatcherModule.sendForbidden(response); } else { deliverFile(request, response, staticFile, expiration); }