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")); + } + }; + } +}