Skip to content

Commit d8270cc

Browse files
committed
illegal URL sets status code 404, suppress log for these kind of errors
1 parent 5ffd7bd commit d8270cc

8 files changed

Lines changed: 65 additions & 20 deletions

File tree

src/main/java/com/headissue/Application.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.stream.Collectors;
2323
import java.util.stream.Stream;
2424
import org.eclipse.jetty.server.Server;
25+
import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
2526
import org.eclipse.jetty.servlet.ServletContextHandler;
2627
import org.eclipse.jetty.util.resource.Resource;
2728
import org.eclipse.jetty.util.resource.ResourceCollection;
@@ -89,6 +90,10 @@ private static void awaitTermination() {
8990

9091
private static ServletContextHandler buildHandler(File directory) {
9192
ServletContextHandler servletContextHandler = buildServletContextHandler();
93+
final ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();
94+
errorHandler.addErrorPage(Throwable.class, "/500");
95+
errorHandler.addErrorPage(NotFoundException.class, "/404");
96+
servletContextHandler.setErrorHandler(errorHandler);
9297
ServletHandlerBuilder builder = new ServletHandlerBuilder(servletContextHandler);
9398
builder.addForwardIdToDocumentFilter();
9499
builder.addPdfUpload(directory);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.headissue;
2+
3+
/** @author Jens Wilke */
4+
public class NotFoundException extends RuntimeException {
5+
6+
public NotFoundException() {}
7+
8+
public NotFoundException(Throwable cause) {
9+
super(cause);
10+
}
11+
}

src/main/java/com/headissue/servlet/SeePdfs.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import com.github.jknack.handlebars.Handlebars;
88
import com.github.jknack.handlebars.internal.lang3.StringUtils;
9+
import com.headissue.NotFoundException;
910
import com.headissue.config.NanoIdConfig;
1011
import com.headissue.domain.AccessRule;
1112
import com.headissue.domain.UtmParameters;
@@ -68,8 +69,7 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
6869
String accessId = getAccessId(req);
6970
Path accessYaml = getAccessYaml(accessId);
7071
if (Files.notExists(accessYaml)) {
71-
req.getRequestDispatcher("/404").forward(req, resp);
72-
return;
72+
throw new NotFoundException();
7373
}
7474
AccessRule accessRule = yaml.loadAs(new FileInputStream(accessYaml.toFile()), AccessRule.class);
7575
if (isExpired(accessYaml)) {

src/main/java/com/headissue/servlet/TemplateRendering.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.headissue.servlet;
22

33
import com.github.jknack.handlebars.Handlebars;
4+
import com.headissue.NotFoundException;
45
import jakarta.servlet.ServletException;
56
import jakarta.servlet.http.HttpServlet;
67
import jakarta.servlet.http.HttpServletRequest;
78
import jakarta.servlet.http.HttpServletResponse;
8-
99
import java.io.FileNotFoundException;
1010
import java.io.IOException;
1111
import org.eclipse.jetty.http.MimeTypes;
@@ -27,9 +27,12 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
2727
handlebars.compile("index.hbs").apply(null, resp.getWriter());
2828
} else {
2929
try {
30+
if ("/404".equals(pathInfo)) {
31+
resp.setStatus(404);
32+
}
3033
handlebars.compile(pathInfo + ".hbs").apply(null, resp.getWriter());
3134
} catch (FileNotFoundException e) {
32-
req.getRequestDispatcher("/404").forward(req, resp);
35+
throw new NotFoundException(e);
3336
}
3437
}
3538
}

src/main/resources/logback.xml

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,11 @@
1010
</encoder>
1111
</appender>
1212

13-
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
14-
<file>${jetty.home:-target}/logs/jetty.log</file>
15-
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
16-
<fileNamePattern>${jetty.home:-target}/logs/jetty.log.%d{yyyy-MM-dd-HH-mm}.log.zip</fileNamePattern>
17-
</rollingPolicy>
18-
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
19-
<maxFileSize>1KB</maxFileSize>
20-
</triggeringPolicy>
21-
<encoder>
22-
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
23-
</encoder>
24-
</appender>
25-
13+
<!-- blank out log messages caused by illegal URLs that yield 404 -->
14+
<logger level="ERROR" name="org.eclipse.jetty.server.HttpChannel" additivity="false">
15+
<appender-ref ref="STDOUT" />
16+
</logger>
2617
<root level="INFO">
2718
<appender-ref ref="STDOUT" />
28-
<appender-ref ref="FILE" />
2919
</root>
3020
</configuration>

src/main/resources/static/500.hbs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<title>404</title>
5+
{{> "head.hbs"}}
6+
</head>
7+
<body style="background: url('/img/Solid-polymeric-foam.jpg'); background-size: cover">
8+
<main style="display: flex;
9+
flex-direction: column;
10+
flex-wrap: wrap;
11+
justify-content: space-between;
12+
align-content: flex-end;">
13+
<div style="padding: 10px">
14+
<h1 style="text-shadow: 1px 1px #888; color: red">Ouch!</h1>
15+
<h2 style="text-shadow: 1px 1px #888;">Something bad has happened.</h2>
16+
</div>
17+
<div style="text-shadow: 1px 1px #888; font-size: 0.8rem">
18+
<a href="https://commons.wikimedia.org/wiki/File:Solid-polymeric-foam.jpg">Giovanna Canu, Eva Santini</a>, <a
19+
href="https://creativecommons.org/licenses/by/4.0">CC BY 4.0</a>, via Wikimedia Commons
20+
</div>
21+
</main>
22+
23+
{{> "molecule/footer.hbs" }}
24+
</body>
25+
</html>

src/test/java/com/headissue/feature/docs/AccessIT.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,10 @@ void wherePdfIsDownloadable() {
6969
when.theyDownloadIt();
7070
then.theyShouldSeeItsDownloaded(tempDir);
7171
}
72+
73+
@Test
74+
void whereTheLinkTargetDoesNotExist() {
75+
when.theyOpenTheTestPdf("a;lkdfjas;dlkfjas;dlfkjasd;fkljasd");
76+
then.theyShould404Page();
77+
}
7278
}

src/test/java/com/headissue/feature/steps/Then.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ public void theyShouldSeeItsNotDownloadable() {
7575

7676
public void theyShouldSeeItsDownloaded(Path tempDir) {
7777
await()
78-
.alias("file downloaded to system")
79-
.atMost(1, SECONDS)
78+
.alias("file downloaded to system, at: " + tempDir)
79+
.atMost(5, SECONDS)
8080
.until(
8181
() -> {
8282
try (Stream<Path> list = Files.list(tempDir)) {
@@ -99,4 +99,9 @@ public void theySeeTheExpiryMessage() {
9999
return true;
100100
});
101101
}
102+
103+
public void theyShould404Page() {
104+
assertThat(
105+
driver.findElement(cssSelector("body")).getText(), StringContains.containsString("404"));
106+
}
102107
}

0 commit comments

Comments
 (0)