This is an automated email from the ASF dual-hosted git repository.

coheigea pushed a commit to branch CXF-8133
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 138b3e3a722e8f0f6744901181c7891bb3b3fb73
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Fri Oct 18 14:53:29 2019 +0100

    CXF-8133 - Disable JAX-RS HTTP method overriding by default
---
 .../apache/cxf/jaxrs/impl/RequestPreprocessor.java | 25 +++++++++++++++-------
 .../cxf/jaxrs/impl/RequestPreprocessorTest.java    | 14 ++++++++++++
 .../jaxrs/JAXRSClientServerSpringBookTest.java     | 23 --------------------
 3 files changed, 31 insertions(+), 31 deletions(-)

diff --git 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java
 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java
index 3061e8d..6d52c85 100644
--- 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java
+++ 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java
@@ -33,9 +33,16 @@ import javax.ws.rs.core.UriInfo;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.jaxrs.utils.HttpUtils;
 import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageUtils;
 
 public class RequestPreprocessor {
 
+    /**
+     * Whether to allow the client to override the HTTP method via either 
METHOD_QUERY or METHOD_HEADER.
+     * The default is false.
+     */
+    private static final String ALLOW_HTTP_METHOD_OVERRIDE = 
"org.apache.cxf.jaxrs.allow.http.method.override";
+
     private static final String ACCEPT_QUERY = "_type";
     private static final String CTYPE_QUERY = "_ctype";
     private static final String METHOD_QUERY = "_method";
@@ -156,15 +163,17 @@ public class RequestPreprocessor {
     private void handleMethod(Message m,
                               MultivaluedMap<String, String> queries,
                               HttpHeaders headers) {
-        String method = queries.getFirst(METHOD_QUERY);
-        if (method == null) {
-            List<String> list = headers.getRequestHeader(METHOD_HEADER);
-            if (list != null && list.size() == 1) {
-                method = list.get(0);
+        if (MessageUtils.getContextualBoolean(m, ALLOW_HTTP_METHOD_OVERRIDE, 
false)) {
+            String method = queries.getFirst(METHOD_QUERY);
+            if (method == null) {
+                List<String> list = headers.getRequestHeader(METHOD_HEADER);
+                if (list != null && list.size() == 1) {
+                    method = list.get(0);
+                }
+            }
+            if (method != null) {
+                m.put(Message.HTTP_REQUEST_METHOD, method);
             }
-        }
-        if (method != null) {
-            m.put(Message.HTTP_REQUEST_METHOD, method);
         }
     }
 
diff --git 
a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestPreprocessorTest.java
 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestPreprocessorTest.java
index 69c073d..3ef3c6c 100644
--- 
a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestPreprocessorTest.java
+++ 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestPreprocessorTest.java
@@ -57,6 +57,13 @@ public class RequestPreprocessorTest {
     public void testMethodQuery() {
         Message m = mockMessage("http://localhost:8080";, "/bar", 
"_method=GET", "POST");
         RequestPreprocessor sqh = new RequestPreprocessor();
+
+        // By default it should ignore _method
+        sqh.preprocess(m, new UriInfoImpl(m, null));
+        assertEquals("POST", m.get(Message.HTTP_REQUEST_METHOD));
+
+        // Now allow HTTP method overriding
+        m.put("org.apache.cxf.jaxrs.allow.http.method.override", true);
         sqh.preprocess(m, new UriInfoImpl(m, null));
         assertEquals("GET", m.get(Message.HTTP_REQUEST_METHOD));
     }
@@ -65,6 +72,13 @@ public class RequestPreprocessorTest {
     public void testMethodOverride() {
         Message m = mockMessage("http://localhost:8080";, "/bar", "bar", 
"POST", "GET");
         RequestPreprocessor sqh = new RequestPreprocessor();
+
+        // By default it should ignore the HTTP header
+        sqh.preprocess(m, new UriInfoImpl(m, null));
+        assertEquals("POST", m.get(Message.HTTP_REQUEST_METHOD));
+
+        // Now allow HTTP method overriding
+        m.put("org.apache.cxf.jaxrs.allow.http.method.override", true);
         sqh.preprocess(m, new UriInfoImpl(m, null));
         assertEquals("GET", m.get(Message.HTTP_REQUEST_METHOD));
     }
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java
 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java
index c08a6e6..21110ff 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java
@@ -768,15 +768,8 @@ public class JAXRSClientServerSpringBookTest extends 
AbstractBusClientServerTest
     }
 
     private void getBookAegis(String endpointAddress, String type) throws 
Exception {
-        getBookAegis(endpointAddress, type, null);
-    }
-
-    private void getBookAegis(String endpointAddress, String type, String 
mHeader) throws Exception {
         WebClient client = WebClient.create(endpointAddress,
             Collections.singletonList(new AegisElementProvider<Object>()));
-        if (mHeader != null) {
-            client = client.header("X-HTTP-Method-Override", mHeader);
-        }
         Book book = client.accept(type).get(Book.class);
 
         assertEquals(124L, book.getId());
@@ -843,22 +836,6 @@ public class JAXRSClientServerSpringBookTest extends 
AbstractBusClientServerTest
     }
 
     @Test
-    public void testRetrieveBookAegis1() throws Exception {
-
-        String endpointAddress =
-            "http://localhost:"; + PORT + 
"/the/thebooks4/bookstore/books/aegis/retrieve?_method=RETRIEVE";
-        getBookAegis(endpointAddress, "application/xml");
-    }
-
-    @Test
-    public void testRetrieveBookAegis2() throws Exception {
-
-        String endpointAddress =
-            "http://localhost:"; + PORT + 
"/the/thebooks4/bookstore/books/aegis/retrieve";
-        getBookAegis(endpointAddress, "application/xml", "RETRIEVE");
-    }
-
-    @Test
     public void testRetrieveGetBookAegis() throws Exception {
 
         String endpointAddress =

Reply via email to