You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bu...@apache.org on 2020/04/24 11:24:17 UTC
[cxf] branch master updated: CXF-8269 Servlet Transport: allow any
whitespace character as param-value separator
This is an automated email from the ASF dual-hosted git repository.
buhhunyx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/master by this push:
new 706dd02 CXF-8269 Servlet Transport: allow any whitespace character as param-value separator
706dd02 is described below
commit 706dd02fd37597967a10d5a5c1ad526b995f88ea
Author: Alexey Markevich <bu...@gmail.com>
AuthorDate: Wed Apr 22 21:34:14 2020 +0300
CXF-8269 Servlet Transport: allow any whitespace character as
param-value separator
---
.../cxf/transport/servlet/AbstractHTTPServlet.java | 54 +++++++--------
.../test/resources/jaxrs_dispatch/WEB-INF/web.xml | 77 ++++++++++++----------
2 files changed, 67 insertions(+), 64 deletions(-)
diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
index 3353399..538da28 100644
--- a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
+++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
@@ -21,11 +21,11 @@ package org.apache.cxf.transport.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -39,7 +39,6 @@ import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
@@ -178,36 +177,32 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
});
}
- protected static List<Pattern> parseListSequence(String values) {
+ private static List<Pattern> parseListSequence(String values) {
if (values != null) {
- List<Pattern> list = new LinkedList<>();
- String[] pathValues = values.split(" ");
- for (String value : pathValues) {
- String theValue = value.trim();
- if (theValue.length() > 0) {
- list.add(Pattern.compile(theValue));
+ List<Pattern> list = new ArrayList<>();
+ for (String value : values.split("\\s")) {
+ if (!value.isEmpty()) {
+ list.add(Pattern.compile(value));
}
}
+ ((ArrayList<?>)list).trimToSize();
return list;
}
return null;
}
- protected static Map<String, String> parseMapSequence(String sequence) {
+ private static Map<String, String> parseMapSequence(String sequence) {
if (sequence != null) {
sequence = sequence.trim();
Map<String, String> map = new HashMap<>();
- String[] pairs = sequence.split(" ");
- for (String pair : pairs) {
- String thePair = pair.trim();
- if (thePair.length() == 0) {
- continue;
- }
- String[] value = thePair.split("=");
- if (value.length == 2) {
- map.put(value[0].trim(), value[1].trim());
- } else {
- map.put(thePair, "");
+ for (String pair : sequence.split("\\s")) {
+ if (!pair.isEmpty()) {
+ String[] value = pair.split("=");
+ if (value.length == 2) {
+ map.put(value[0], value[1]);
+ } else {
+ map.put(pair, "");
+ }
}
}
return map;
@@ -330,7 +325,7 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
}
if (redirectQueryCheck) {
String queryString = request.getQueryString();
- if (queryString != null && queryString.length() > 0) {
+ if (queryString != null && !queryString.isEmpty()) {
path += "?" + queryString;
}
}
@@ -347,13 +342,12 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
protected void serveStaticContent(HttpServletRequest request,
HttpServletResponse response,
String pathInfo) throws ServletException {
- InputStream is = getResourceAsStream(pathInfo);
- if (is == null) {
- throw new ServletException("Static resource " + pathInfo + " is not available");
- }
- try {
+ try (InputStream is = getResourceAsStream(pathInfo)) {
+ if (is == null) {
+ throw new ServletException("Static resource " + pathInfo + " is not available");
+ }
int ind = pathInfo.lastIndexOf('.');
- if (ind != -1 && ind < pathInfo.length()) {
+ if (ind > 0) {
String type = getStaticResourceContentType(pathInfo.substring(ind + 1));
if (type != null) {
response.setContentType(type);
@@ -363,9 +357,7 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
if (cacheControl != null) {
response.setHeader("Cache-Control", cacheControl.trim());
}
- ServletOutputStream os = response.getOutputStream();
- IOUtils.copyAndCloseInput(is, os);
- os.flush();
+ IOUtils.copy(is, response.getOutputStream());
} catch (IOException ex) {
throw new ServletException("Static resource " + pathInfo
+ " can not be written to the output stream");
diff --git a/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/web.xml b/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/web.xml
index 3795f7c..470c541 100644
--- a/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/web.xml
+++ b/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/web.xml
@@ -27,26 +27,27 @@
</context-param>
<listener>
<listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
+ org.springframework.web.context.ContextLoaderListener
+ </listener-class>
</listener>
+
<servlet>
- <servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-name>
+ <servlet-name>CXFServlet</servlet-name>
<servlet-class>
- org.apache.cxf.transport.servlet.CXFServlet
- </servlet-class>
+ org.apache.cxf.transport.servlet.CXFServlet
+ </servlet-class>
<init-param>
<param-name>redirects-list</param-name>
<param-value>
- /
- </param-value>
+ /
+ </param-value>
</init-param>
<init-param>
<param-name>redirect-attributes</param-name>
<param-value>
- javax.servlet.include.request_uri
- </param-value>
+ javax.servlet.include.request_uri
+ </param-value>
</init-param>
<init-param>
<param-name>redirect-servlet-name</param-name>
@@ -58,17 +59,18 @@
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/the/*</url-pattern>
</servlet-mapping>
+
<servlet>
- <servlet-name>RedirectIncludeCXFServlet</servlet-name>
<display-name>Redirect CXF Servlet</display-name>
+ <servlet-name>RedirectIncludeCXFServlet</servlet-name>
<servlet-class>
- org.apache.cxf.transport.servlet.CXFServlet
- </servlet-class>
+ org.apache.cxf.transport.servlet.CXFServlet
+ </servlet-class>
<init-param>
<param-name>redirects-list</param-name>
<param-value>
- /(\w)+.html
- </param-value>
+ /(\w)+.html
+ </param-value>
</init-param>
<init-param>
<param-name>redirect-with-include</param-name>
@@ -84,17 +86,18 @@
<servlet-name>RedirectIncludeCXFServlet</servlet-name>
<url-pattern>/book_include.html</url-pattern>
</servlet-mapping>
+
<servlet>
- <servlet-name>RedirectCXFServlet</servlet-name>
<display-name>Redirect CXF Servlet</display-name>
+ <servlet-name>RedirectCXFServlet</servlet-name>
<servlet-class>
- org.apache.cxf.transport.servlet.CXFServlet
- </servlet-class>
+ org.apache.cxf.transport.servlet.CXFServlet
+ </servlet-class>
<init-param>
<param-name>redirects-list</param-name>
<param-value>
- /(\w)+.html
- </param-value>
+ /(\w)+.html
+ </param-value>
</init-param>
<init-param>
<param-name>redirect-servlet-path</param-name>
@@ -106,15 +109,20 @@
<servlet-name>RedirectCXFServlet</servlet-name>
<url-pattern>/book.html</url-pattern>
</servlet-mapping>
+
<servlet>
- <servlet-name>DefaultCXFServlet</servlet-name>
<display-name>Default CXF Servlet</display-name>
+ <servlet-name>DefaultCXFServlet</servlet-name>
<servlet-class>
- org.apache.cxf.transport.servlet.CXFServlet
- </servlet-class>
+ org.apache.cxf.transport.servlet.CXFServlet
+ </servlet-class>
<init-param>
<param-name>static-resources-list</param-name>
- <param-value>/(\w)+.html</param-value>
+ <!-- keep tab identation -->
+ <param-value>
+ /(\w)+.html
+ /(\w)+.css
+ </param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
@@ -122,23 +130,24 @@
<servlet-name>DefaultCXFServlet</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
+
<servlet>
- <servlet-name>WelcomeCXFServlet</servlet-name>
<display-name>Welcome CXF Servlet</display-name>
+ <servlet-name>WelcomeCXFServlet</servlet-name>
<servlet-class>
- org.apache.cxf.transport.servlet.CXFServlet
- </servlet-class>
+ org.apache.cxf.transport.servlet.CXFServlet
+ </servlet-class>
<init-param>
<param-name>redirects-list</param-name>
<param-value>
- /
- </param-value>
+ /
+ </param-value>
</init-param>
<init-param>
<param-name>redirect-attributes</param-name>
<param-value>
- javax.servlet.include.request_uri
- </param-value>
+ javax.servlet.include.request_uri
+ </param-value>
</init-param>
<init-param>
<param-name>redirect-servlet-name</param-name>
@@ -150,12 +159,13 @@
<servlet-name>WelcomeCXFServlet</servlet-name>
<url-pattern>/welcome/*</url-pattern>
</servlet-mapping>
+
<servlet>
- <servlet-name>WelcomeCXFServlet2</servlet-name>
<display-name>Welcome CXF Servlet2</display-name>
+ <servlet-name>WelcomeCXFServlet2</servlet-name>
<servlet-class>
- org.apache.cxf.transport.servlet.CXFServlet
- </servlet-class>
+ org.apache.cxf.transport.servlet.CXFServlet
+ </servlet-class>
<init-param>
<param-name>static-welcome-file</param-name>
<param-value>/welcomeBook.html</param-value>
@@ -170,6 +180,7 @@
<servlet-name>WelcomeCXFServlet2</servlet-name>
<url-pattern>/welcome2/*</url-pattern>
</servlet-mapping>
+
<welcome-file-list>
<welcome-file>welcomeBook.html</welcome-file>
</welcome-file-list>