You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/07/16 16:30:33 UTC
git commit: CAMEL-6424: camel-netty-http added support for basic auth.
Updated Branches:
refs/heads/master 342bfe1dc -> a977e7835
CAMEL-6424: camel-netty-http added support for basic auth.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a977e783
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a977e783
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a977e783
Branch: refs/heads/master
Commit: a977e78359d98bd668683c3e98f0929e49dfa1d1
Parents: 342bfe1
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 16 16:30:22 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 16 16:30:22 2013 +0200
----------------------------------------------------------------------
.../netty/http/DefaultNettyHttpBinding.java | 17 +++++++++++++++--
.../component/netty/http/NettyHttpConstants.java | 1 +
.../http/handlers/HttpServerChannelHandler.java | 6 ++++++
.../NettyHttpBasicAuthConstraintMapperTest.java | 4 ++--
.../netty/http/NettyHttpBasicAuthTest.java | 1 +
...ttyHttpSimpleBasicAuthConstraintMapperTest.java | 4 ++--
.../netty/http/SpringNettyHttpBasicAuthTest.xml | 8 ++++----
7 files changed, 31 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/a977e783/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
index 8e7579a..64f5b58 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
@@ -25,6 +25,7 @@ import java.net.URLDecoder;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import org.apache.camel.Exchange;
@@ -120,7 +121,7 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding {
// strip the starting endpoint path so the path is relative to the endpoint uri
String path = uri.getPath();
- if (configuration.getPath() != null && configuration.getPath().startsWith(path)) {
+ if (configuration.getPath() != null && path.startsWith(configuration.getPath())) {
path = path.substring(configuration.getPath().length());
}
headers.put(Exchange.HTTP_PATH, path);
@@ -132,9 +133,21 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding {
for (String name : request.getHeaderNames()) {
// mapping the content-type
- if (name.toLowerCase().equals("content-type")) {
+ if (name.toLowerCase(Locale.US).equals("content-type")) {
name = Exchange.CONTENT_TYPE;
}
+
+ if (name.toLowerCase(Locale.US).equals("authorization")) {
+ String value = request.getHeader(name);
+ // store a special header that this request was authenticated using HTTP Basic
+ if (value != null && value.trim().startsWith("Basic")) {
+ if (headerFilterStrategy != null
+ && !headerFilterStrategy.applyFilterToExternalHeaders(NettyHttpConstants.HTTP_AUTHENTICATION, "Basic", exchange)) {
+ NettyHttpHelper.appendHeader(headers, NettyHttpConstants.HTTP_AUTHENTICATION, "Basic");
+ }
+ }
+ }
+
// add the headers one by one, and use the header filter strategy
List<String> values = request.getHeaders(name);
Iterator<?> it = ObjectHelper.createIterator(values);
http://git-wip-us.apache.org/repos/asf/camel/blob/a977e783/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConstants.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConstants.java
index 073ba78..df31626 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConstants.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConstants.java
@@ -24,6 +24,7 @@ public final class NettyHttpConstants {
public static final String CONTENT_TYPE_JAVA_SERIALIZED_OBJECT = "application/x-java-serialized-object";
public static final String CONTENT_TYPE_WWW_FORM_URLENCODED = "application/x-www-form-urlencoded";
public static final String HTTP_RESPONSE_TEXT = "CamelHttpResponseText";
+ public static final String HTTP_AUTHENTICATION = "CamelHttpAuthentication";
private NettyHttpConstants() {
}
http://git-wip-us.apache.org/repos/asf/camel/blob/a977e783/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
index c2e3731..37c60a1 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
@@ -128,6 +128,12 @@ public class HttpServerChannelHandler extends ServerChannelHandler {
URI uri = new URI(request.getUri());
String target = uri.getPath();
+ // strip the starting endpoint path so the target is relative to the endpoint uri
+ String path = consumer.getConfiguration().getPath();
+ if (path != null && target.startsWith(path)) {
+ target = target.substring(path.length());
+ }
+
// is it a restricted resource?
String roles;
if (security.getSecurityConstraint() != null) {
http://git-wip-us.apache.org/repos/asf/camel/blob/a977e783/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthConstraintMapperTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthConstraintMapperTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthConstraintMapperTest.java
index 879b4f2..dd46daa 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthConstraintMapperTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthConstraintMapperTest.java
@@ -46,8 +46,8 @@ public class NettyHttpBasicAuthConstraintMapperTest extends BaseNettyTest {
security.setSecurityAuthenticator(auth);
SecurityConstraintMapping matcher = new SecurityConstraintMapping();
- matcher.addInclusion("/foo/*");
- matcher.addExclusion("/foo/public/*");
+ matcher.addInclusion("/*");
+ matcher.addExclusion("/public/*");
security.setSecurityConstraint(matcher);
jndi.bind("mySecurityConfig", security);
http://git-wip-us.apache.org/repos/asf/camel/blob/a977e783/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthTest.java
index ca328ce..789e66b 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthTest.java
@@ -61,6 +61,7 @@ public class NettyHttpBasicAuthTest extends BaseNettyTest {
}
getMockEndpoint("mock:input").expectedBodiesReceived("Hello World");
+ getMockEndpoint("mock:input").expectedHeaderReceived(NettyHttpConstants.HTTP_AUTHENTICATION, "Basic");
// username:password is scott:secret
String auth = "Basic c2NvdHQ6c2VjcmV0";
http://git-wip-us.apache.org/repos/asf/camel/blob/a977e783/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthConstraintMapperTest.java
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthConstraintMapperTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthConstraintMapperTest.java
index a241a80..4d06a50 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthConstraintMapperTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthConstraintMapperTest.java
@@ -40,8 +40,8 @@ public class NettyHttpSimpleBasicAuthConstraintMapperTest extends BaseNettyTest
JndiRegistry jndi = super.createRegistry();
SecurityConstraintMapping matcher = new SecurityConstraintMapping();
- matcher.addInclusion("/foo/*");
- matcher.addExclusion("/foo/public/*");
+ matcher.addInclusion("/*");
+ matcher.addExclusion("/public/*");
jndi.bind("myConstraint", matcher);
http://git-wip-us.apache.org/repos/asf/camel/blob/a977e783/components/camel-netty-http/src/test/resources/org/apache/camel/component/netty/http/SpringNettyHttpBasicAuthTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-netty-http/src/test/resources/org/apache/camel/component/netty/http/SpringNettyHttpBasicAuthTest.xml b/components/camel-netty-http/src/test/resources/org/apache/camel/component/netty/http/SpringNettyHttpBasicAuthTest.xml
index 7f423ce..0a78086 100644
--- a/components/camel-netty-http/src/test/resources/org/apache/camel/component/netty/http/SpringNettyHttpBasicAuthTest.xml
+++ b/components/camel-netty-http/src/test/resources/org/apache/camel/component/netty/http/SpringNettyHttpBasicAuthTest.xml
@@ -41,15 +41,15 @@
<!-- a * should be used for any role accepted (or even no roles) -->
<property name="inclusions">
<map>
- <entry key="/foo/*" value="*"/>
- <entry key="/foo/admin/*" value="admin"/>
- <entry key="/foo/guest/*" value="admin,guest"/>
+ <entry key="/*" value="*"/>
+ <entry key="/admin/*" value="admin"/>
+ <entry key="/guest/*" value="admin,guest"/>
</map>
</property>
<!-- exclusions is used to define public urls, which requires no authentication -->
<property name="exclusions">
<set>
- <value>/foo/public/*</value>
+ <value>/public/*</value>
</set>
</property>
</bean>