From 5cefda767608decf822e40721c0951abe7dec11b Mon Sep 17 00:00:00 2001 From: FhToday Date: Fri, 21 May 2021 18:06:17 +0800 Subject: [PATCH] fix issue --- pom.xml | 14 +++-- .../embeddedserver/jetty/JettyHandler.java | 21 +++++-- src/test/java/spark/InvalidRequestTest.java | 61 +++++++++++++++++++ 3 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 src/test/java/spark/InvalidRequestTest.java diff --git a/pom.xml b/pom.xml index 70728ade51..646e9785e6 100644 --- a/pom.xml +++ b/pom.xml @@ -40,17 +40,23 @@ org.slf4j - slf4j-api - 1.7.25 + slf4j-simple + 1.7.21 org.slf4j - slf4j-simple + slf4j-api 1.7.25 - test + + + + + + + org.eclipse.jetty diff --git a/src/main/java/spark/embeddedserver/jetty/JettyHandler.java b/src/main/java/spark/embeddedserver/jetty/JettyHandler.java index ef0c432c9a..0bc1a53b5d 100644 --- a/src/main/java/spark/embeddedserver/jetty/JettyHandler.java +++ b/src/main/java/spark/embeddedserver/jetty/JettyHandler.java @@ -4,7 +4,7 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * * http://www.apache.org/licenses/LICENSE-2.0 * @@ -41,12 +41,21 @@ public JettyHandler(Filter filter) { @Override public void doHandle( - String target, - Request baseRequest, - HttpServletRequest request, - HttpServletResponse response) throws IOException, ServletException { + String target, + Request baseRequest, + HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException { HttpRequestWrapper wrapper = new HttpRequestWrapper(request); + final String[] METHODS = {"GET", "POST", "HEAD", "PUT", "OPTIONS", "DELETE", "TRACE", "CONNECT "}; + boolean isValid = false; + for (String METHOD : METHODS) { + if (request.getMethod().equalsIgnoreCase(METHOD)) { + isValid = true; + break; + } + } + if (!isValid) return; filter.doFilter(wrapper, response, null); if (wrapper.notConsumed()) { @@ -57,4 +66,4 @@ public void doHandle( } -} \ No newline at end of file +} diff --git a/src/test/java/spark/InvalidRequestTest.java b/src/test/java/spark/InvalidRequestTest.java new file mode 100644 index 0000000000..97d315aaa9 --- /dev/null +++ b/src/test/java/spark/InvalidRequestTest.java @@ -0,0 +1,61 @@ +package spark; + +import org.junit.Test; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; + +import static spark.Spark.halt; + +public class InvalidRequestTest { + @Test + public void invalidRequestTest(){ + Service service = Service.ignite().port(4567); + service.staticFiles.externalLocation("/Users/"); + + service.get("/", (req, res) -> { + if (!req.requestMethod().equalsIgnoreCase("GET")) { + halt(401, "invalid Http method"); + } + return null; + }); + + String result = ""; + String url = "http://localhost:4567"; + BufferedReader in = null; + try { + URL realUrl = new URL(url); + URLConnection connection = realUrl.openConnection(); + connection.setRequestProperty("Method", "XYZ"); + connection.connect(); + Map> map = connection.getHeaderFields(); + for (String key : map.keySet()) { + System.out.println(key + "--->" + map.get(key)); + } + in = new BufferedReader(new InputStreamReader( + connection.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + return; + } + finally { + try { + if (in != null) { + in.close(); + } + } catch (Exception e2) { + e2.printStackTrace(); + } + } + assertEquals("", result); + } +}