From fcbe4a2e25c7f66ba24e998d38d5de8acefdaeb6 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sun, 11 Oct 2020 21:50:38 +0200 Subject: [PATCH] Add automatic redirect and custom 404 page --- master/pom.xml | 5 ++++ server/pom.xml | 6 +++- .../ctbrec/recorder/server/HttpServer.java | 30 +++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/master/pom.xml b/master/pom.xml index 4530b97e..d33fbbe1 100644 --- a/master/pom.xml +++ b/master/pom.xml @@ -138,6 +138,11 @@ jetty-servlet [9.4.19.v20190610,9.99.99) + + org.eclipse.jetty + jetty-rewrite + [9.4.19.v20190610,9.99.99) + diff --git a/server/pom.xml b/server/pom.xml index e003cdfa..fff1562e 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -86,7 +86,11 @@ org.eclipse.jetty jetty-servlet - + + org.eclipse.jetty + jetty-rewrite + + com.sun.activation javax.activation 1.2.0 diff --git a/server/src/main/java/ctbrec/recorder/server/HttpServer.java b/server/src/main/java/ctbrec/recorder/server/HttpServer.java index aae3cf07..d9619ceb 100644 --- a/server/src/main/java/ctbrec/recorder/server/HttpServer.java +++ b/server/src/main/java/ctbrec/recorder/server/HttpServer.java @@ -1,9 +1,12 @@ package ctbrec.recorder.server; +import static javax.servlet.http.HttpServletResponse.*; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.Writer; import java.net.BindException; import java.net.URL; import java.util.ArrayList; @@ -31,8 +34,10 @@ import org.eclipse.jetty.security.authentication.BasicAuthenticator; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.handler.ErrorHandler; import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.SecuredRedirectHandler; import org.eclipse.jetty.servlet.FilterHolder; @@ -198,6 +203,7 @@ public class HttpServer { https.setIdleTimeout(this.config.getSettings().httpTimeout); String contextPath = Config.getInstance().getContextPath(); + server.setErrorHandler(createErrorHandler(contextPath)); ServletContextHandler basicAuthContext = new ServletContextHandler(ServletContextHandler.SESSIONS); basicAuthContext.setContextPath(contextPath + "/secured"); @@ -270,6 +276,30 @@ public class HttpServer { } } + private ErrorHandler createErrorHandler(String contextPath) { + return new ErrorHandler() { + @Override + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { + if (response.getStatus() == SC_NOT_FOUND && (request.getRequestURI().equals("/") || request.getRequestURI().equals("/index.html"))) { + response.setStatus(SC_MOVED_PERMANENTLY); + response.setHeader("Location", contextPath + "/static/index.html"); + } else { + super.handle(target, baseRequest, request, response); + } + } + + @Override + protected void handleErrorPage(HttpServletRequest request, Writer writer, int code, String message) throws IOException { + if (code == 404) { + writer.write("404

404

Looking for CTB Recorder?

"); + } else { + super.handleErrorPage(request, writer, code, message); + } + } + }; + } + private void addHttpHeaderFilter(ServletContextHandler defaultContext) { FilterHolder httpHeaderFilter = new FilterHolder(new Filter() { @Override