You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2012/01/20 19:05:40 UTC

svn commit: r1234043 - in /camel/trunk/components: camel-http/src/main/java/org/apache/camel/component/http/ camel-http4/src/main/java/org/apache/camel/component/http4/ camel-jetty/src/main/java/org/apache/camel/component/jetty/ camel-jetty/src/test/ja...

Author: janstey
Date: Fri Jan 20 18:05:39 2012
New Revision: 1234043

URL: http://svn.apache.org/viewvc?rev=1234043&view=rev
Log:
CAMEL-4926 - disable HTTP TRACE by default

Added:
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyEndpointSetHttpTraceTest.java
Modified:
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
    camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/CamelServlet.java
    camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpConsumer.java
    camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java
    camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java?rev=1234043&r1=1234042&r2=1234043&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java Fri Jan 20 18:05:39 2012
@@ -63,8 +63,8 @@ public class CamelServlet extends HttpSe
             log.debug("No consumer to service request {}", request);
             response.sendError(HttpServletResponse.SC_NOT_FOUND);
             return;
-        }
-
+        }       
+        
         // are we suspended?
         if (consumer.isSuspended()) {
             log.debug("Consumer suspended, cannot service request {}", request);
@@ -72,6 +72,10 @@ public class CamelServlet extends HttpSe
             return;
         }
 
+        if ("TRACE".equals(request.getMethod()) && !consumer.isTraceEnabled()) {
+            response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+        }
+        
         // create exchange and set data on it
         Exchange exchange = new DefaultExchange(consumer.getEndpoint(), ExchangePattern.InOut);
         if (consumer.getEndpoint().isBridgeEndpoint()) {

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java?rev=1234043&r1=1234042&r2=1234043&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java Fri Jan 20 18:05:39 2012
@@ -26,9 +26,13 @@ import org.apache.camel.impl.DefaultCons
 public class HttpConsumer extends DefaultConsumer implements SuspendableService {
     private final HttpEndpoint endpoint;
     private volatile boolean suspended;
+    private boolean traceEnabled;
 
     public HttpConsumer(HttpEndpoint endpoint, Processor processor) {
         super(endpoint, processor);
+        if (endpoint.isTraceEnabled()) {
+            setTraceEnabled(true);
+        }
         this.endpoint = endpoint;
     }
 
@@ -71,4 +75,11 @@ public class HttpConsumer extends Defaul
         return suspended;
     }
 
+    public boolean isTraceEnabled() {        
+        return this.traceEnabled;
+    }
+
+    public void setTraceEnabled(boolean traceEnabled) {
+        this.traceEnabled = traceEnabled;
+    }
 }

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java?rev=1234043&r1=1234042&r2=1234043&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java Fri Jan 20 18:05:39 2012
@@ -59,6 +59,7 @@ public class HttpEndpoint extends Defaul
     private int proxyPort;
     private String authMethodPriority;
     private boolean transferException;
+    private boolean traceEnabled;
 
     public HttpEndpoint() {
     }
@@ -319,4 +320,12 @@ public class HttpEndpoint extends Defaul
     public void setTransferException(boolean transferException) {
         this.transferException = transferException;
     }
+
+    public boolean isTraceEnabled() {
+        return this.traceEnabled;
+    }
+
+    public void setTraceEnabled(boolean traceEnabled) {
+        this.traceEnabled = traceEnabled;
+    }
 }

Modified: camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/CamelServlet.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/CamelServlet.java?rev=1234043&r1=1234042&r2=1234043&view=diff
==============================================================================
--- camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/CamelServlet.java (original)
+++ camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/CamelServlet.java Fri Jan 20 18:05:39 2012
@@ -49,6 +49,10 @@ public class CamelServlet extends HttpSe
                 return;
             }
 
+            if ("TRACE".equals(request.getMethod()) && !consumer.isTraceEnabled()) {
+                response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+            }
+            
             // Have the camel process the HTTP exchange.
             DefaultExchange exchange = new DefaultExchange(consumer.getEndpoint(), ExchangePattern.InOut);
             if (consumer.getEndpoint().isBridgeEndpoint()) {

Modified: camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpConsumer.java?rev=1234043&r1=1234042&r2=1234043&view=diff
==============================================================================
--- camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpConsumer.java (original)
+++ camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpConsumer.java Fri Jan 20 18:05:39 2012
@@ -25,9 +25,13 @@ import org.apache.camel.impl.DefaultCons
 public class HttpConsumer extends DefaultConsumer {
 
     private final HttpEndpoint endpoint;
+    private boolean traceEnabled;    
 
     public HttpConsumer(HttpEndpoint endpoint, Processor processor) {
         super(endpoint, processor);
+        if (endpoint.isTraceEnabled()) {
+            setTraceEnabled(true);
+        }        
         this.endpoint = endpoint;
     }
 
@@ -55,4 +59,12 @@ public class HttpConsumer extends Defaul
         endpoint.disconnect(this);
         super.doStop();
     }
+
+    public boolean isTraceEnabled() {        
+        return this.traceEnabled;
+    }
+
+    public void setTraceEnabled(boolean traceEnabled) {
+        this.traceEnabled = traceEnabled;
+    }    
 }

Modified: camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java?rev=1234043&r1=1234042&r2=1234043&view=diff
==============================================================================
--- camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java (original)
+++ camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java Fri Jan 20 18:05:39 2012
@@ -58,7 +58,8 @@ public class HttpEndpoint extends Defaul
     private boolean chunked = true;
     private boolean disableStreamCache;
     private boolean transferException;
-
+    private boolean traceEnabled;
+    
     public HttpEndpoint() {
     }
 
@@ -310,4 +311,12 @@ public class HttpEndpoint extends Defaul
     public void setTransferException(boolean transferException) {
         this.transferException = transferException;
     }
+    
+    public boolean isTraceEnabled() {
+        return this.traceEnabled;
+    }
+
+    public void setTraceEnabled(boolean traceEnabled) {
+        this.traceEnabled = traceEnabled;
+    }
 }

Modified: camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java?rev=1234043&r1=1234042&r2=1234043&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java (original)
+++ camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java Fri Jan 20 18:05:39 2012
@@ -63,6 +63,10 @@ public class CamelContinuationServlet ex
             return;
         }
 
+        if ("TRACE".equals(request.getMethod()) && !consumer.isTraceEnabled()) {
+            response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+        }
+        
         final Exchange result = (Exchange) request.getAttribute(EXCHANGE_ATTRIBUTE_NAME);
         if (result == null) {
             // no asynchronous result so leverage continuation

Added: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyEndpointSetHttpTraceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyEndpointSetHttpTraceTest.java?rev=1234043&view=auto
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyEndpointSetHttpTraceTest.java (added)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyEndpointSetHttpTraceTest.java Fri Jan 20 18:05:39 2012
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jetty;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.TraceMethod;
+import org.junit.Test;
+
+/**
+ * @version 
+ */
+public class JettyEndpointSetHttpTraceTest extends BaseJettyTest {
+
+    private int portTraceOn = 8080;
+    private int portTraceOff = 8081;
+
+    public JettyEndpointSetHttpTraceTest() {
+        portTraceOn = getNextPort();
+        portTraceOff = getNextPort();
+    }
+    
+    @Test
+    public void testTraceDisabled() throws Exception {        
+        HttpClient httpclient = new HttpClient();
+        TraceMethod trace = new TraceMethod("http://localhost:" + portTraceOff + "/myservice");
+        httpclient.executeMethod(trace);
+
+        // TRACE shouldn't be allowed by default
+        assertTrue(trace.getStatusCode() == 405);
+        trace.releaseConnection();
+    }
+    
+    @Test
+    public void testTraceEnabled() throws Exception {        
+        HttpClient httpclient = new HttpClient();
+        TraceMethod trace = new TraceMethod("http://localhost:" + portTraceOn + "/myservice");
+        httpclient.executeMethod(trace);
+
+        // TRACE is now allowed
+        assertTrue(trace.getStatusCode() == 200);
+        trace.releaseConnection();
+    }
+    
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("jetty:http://localhost:" + portTraceOff + "/myservice").to("log:foo");
+                from("jetty:http://localhost:" + portTraceOn + "/myservice?traceEnabled=true").to("log:bar");
+            }
+        };
+    }
+}