Repository: camel
Updated Branches:
  refs/heads/master 35df1198e -> 343559bcf


CAMEL-8083 camel-jetty - added option to quickly enable CORS


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/28c1a5ac
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/28c1a5ac
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/28c1a5ac

Branch: refs/heads/master
Commit: 28c1a5ac5d9b182f3be9fa371d028ff01bbb585c
Parents: 35df119
Author: Paolo Antinori <panti...@redhat.com>
Authored: Wed Nov 26 10:26:06 2014 +0100
Committer: Willem Jiang <willem.ji...@gmail.com>
Committed: Thu Nov 27 15:41:07 2014 +0800

----------------------------------------------------------------------
 .../component/jetty/JettyHttpComponent.java     |  8 +++
 .../camel/component/jetty/EnableCORSTest.java   | 71 ++++++++++++++++++++
 2 files changed, 79 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/28c1a5ac/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
 
b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
index 5142470..4bbd5b3 100644
--- 
a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
+++ 
b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
@@ -76,6 +76,7 @@ import org.eclipse.jetty.server.session.SessionHandler;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.servlets.CrossOriginFilter;
 import org.eclipse.jetty.servlets.MultiPartFilter;
 import org.eclipse.jetty.util.component.Container;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
@@ -171,6 +172,7 @@ public class JettyHttpComponent extends HttpComponent 
implements RestConsumerFac
                                                               Boolean.class, 
true);
         Filter multipartFilter = 
resolveAndRemoveReferenceParameter(parameters, "multipartFilterRef", 
Filter.class);
         List<Filter> filters = 
resolveAndRemoveReferenceListParameter(parameters, "filtersRef", Filter.class);
+        Boolean enableCors = getAndRemoveParameter(parameters, "enableCORS", 
Boolean.class, false);
         Long continuationTimeout = getAndRemoveParameter(parameters, 
"continuationTimeout", Long.class);
         Boolean useContinuation = getAndRemoveParameter(parameters, 
"useContinuation", Boolean.class);
         HeaderFilterStrategy headerFilterStrategy = 
resolveAndRemoveReferenceParameter(parameters, "headerFilterStrategy", 
HeaderFilterStrategy.class);
@@ -263,6 +265,12 @@ public class JettyHttpComponent extends HttpComponent 
implements RestConsumerFac
             endpoint.setMultipartFilter(multipartFilter);
             endpoint.setEnableMultipartFilter(true);
         }
+        if (enableCors) {
+            if (filters == null){
+                filters = new ArrayList<Filter>(1);
+            }
+            filters.add(new CrossOriginFilter());
+        }
         if (filters != null) {
             endpoint.setFilters(filters);
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/28c1a5ac/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/EnableCORSTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/EnableCORSTest.java
 
b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/EnableCORSTest.java
new file mode 100644
index 0000000..e893775
--- /dev/null
+++ 
b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/EnableCORSTest.java
@@ -0,0 +1,71 @@
+/**
+ * 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.Header;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.junit.Test;
+
+public class EnableCORSTest extends BaseJettyTest {
+
+    @Test
+    public void testCORSdisabled() throws Exception {
+        HttpClient httpclient = new HttpClient();
+        HttpMethod httpMethod = new GetMethod("http://localhost:"; + getPort() 
+ "/test1");
+        httpMethod.addRequestHeader("Origin", "http://localhost:9000";);
+        httpMethod.addRequestHeader("Referer", "http://localhost:9000";);
+
+        int status = httpclient.executeMethod(httpMethod);
+
+        assertEquals("Get a wrong response status", 200, status);
+
+        Header responseHeader = 
httpMethod.getResponseHeader("Access-Control-Allow-Credentials");
+        assertNull("Access-Control-Allow-Credentials HEADER should not be 
set", responseHeader);
+    }
+
+
+    @Test
+    public void testCORSenabled() throws Exception {
+        HttpClient httpclient = new HttpClient();
+        HttpMethod httpMethod = new GetMethod("http://localhost:"; + getPort2() 
+ "/test2");
+        httpMethod.addRequestHeader("Origin", "http://localhost:9000";);
+        httpMethod.addRequestHeader("Referer", "http://localhost:9000";);
+
+
+        int status = httpclient.executeMethod(httpMethod);
+
+        assertEquals("Get a wrong response status", 200, status);
+
+        Header responseHeader = 
httpMethod.getResponseHeader("Access-Control-Allow-Credentials");
+        assertTrue("CORS not enabled", 
Boolean.valueOf(responseHeader.getValue()));
+
+
+    }
+
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                
from("jetty://http://localhost:{{port}}/test1?enableCORS=false";).transform(simple("OK"));
+                
from("jetty://http://localhost:{{port2}}/test2?enableCORS=true";).transform(simple("OK"));
+            }
+        };
+    }
+}

Reply via email to