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 2010/04/14 15:43:07 UTC
svn commit: r933947 - in /camel/trunk/components:
camel-http/src/main/java/org/apache/camel/component/http/
camel-http/src/test/java/org/apache/camel/component/http/
camel-jetty/src/test/java/org/apache/camel/component/jetty/
Author: davsclaus
Date: Wed Apr 14 13:43:06 2010
New Revision: 933947
URL: http://svn.apache.org/viewvc?rev=933947&view=rev
Log:
CAMEL-2645: Make it easier to configure authentication and proxy authentication on camel-http.
Added:
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/AuthMethod.java (with props)
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConfiguration.java (with props)
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/NTMLAuthenticationHttpClientConfigurer.java
- copied, changed from r933856, camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/BasicAuthenticationHttpClientConfigurer.java
camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthBasicTest.java (contents, props changed)
- copied, changed from r933856, camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpClientConfigurerTest.java
camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthDigestTest.java (with props)
camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthNTLMTest.java (with props)
camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthComponentConfiguredTest.java
- copied, changed from r933856, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthTest.java
Removed:
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/ProxyHttpClientConfigurer.java
camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpClientConfigurerTest.java
Modified:
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/BasicAuthenticationHttpClientConfigurer.java
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CompositeHttpConfigurer.java
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyTest.java
camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthTest.java
Added: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/AuthMethod.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/AuthMethod.java?rev=933947&view=auto
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/AuthMethod.java (added)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/AuthMethod.java Wed Apr 14 13:43:06 2010
@@ -0,0 +1,11 @@
+package org.apache.camel.component.http;
+
+/**
+ * Authentication policy
+ *
+ * @version $Revision$
+ */
+public enum AuthMethod {
+
+ Basic, Digest, NTML;
+}
Propchange: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/AuthMethod.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/AuthMethod.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/BasicAuthenticationHttpClientConfigurer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/BasicAuthenticationHttpClientConfigurer.java?rev=933947&r1=933946&r2=933947&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/BasicAuthenticationHttpClientConfigurer.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/BasicAuthenticationHttpClientConfigurer.java Wed Apr 14 13:43:06 2010
@@ -18,31 +18,38 @@ package org.apache.camel.component.http;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.NTCredentials;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
public class BasicAuthenticationHttpClientConfigurer implements HttpClientConfigurer {
+ private final boolean proxy;
private final String username;
private final String password;
- private final String domain;
- private final String host;
-
- public BasicAuthenticationHttpClientConfigurer(String user, String pwd, String domain, String host) {
- username = user;
- password = pwd;
- this.domain = domain;
- this.host = host;
+
+ public BasicAuthenticationHttpClientConfigurer(boolean proxy, String user, String pwd) {
+ this.proxy = proxy;
+ this.username = user;
+ this.password = pwd;
}
public void configureHttpClient(HttpClient client) {
- Credentials defaultcreds;
- if (domain != null) {
- defaultcreds = new NTCredentials(username, password, host, domain);
+ Credentials credentials = new UsernamePasswordCredentials(username, password);
+ if (proxy) {
+ client.getState().setProxyCredentials(AuthScope.ANY, credentials);
} else {
- defaultcreds = new UsernamePasswordCredentials(username, password);
+ client.getState().setCredentials(AuthScope.ANY, credentials);
}
- client.getState().setCredentials(AuthScope.ANY, defaultcreds);
}
+ public boolean isProxy() {
+ return proxy;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
}
Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CompositeHttpConfigurer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CompositeHttpConfigurer.java?rev=933947&r1=933946&r2=933947&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CompositeHttpConfigurer.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CompositeHttpConfigurer.java Wed Apr 14 13:43:06 2010
@@ -17,6 +17,7 @@
package org.apache.camel.component.http;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.apache.commons.httpclient.HttpClient;
@@ -53,4 +54,7 @@ public class CompositeHttpConfigurer imp
}
}
+ public List<HttpClientConfigurer> getConfigurers() {
+ return Collections.unmodifiableList(configurers);
+ }
}
Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java?rev=933947&r1=933946&r2=933947&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java Wed Apr 14 13:43:06 2010
@@ -24,6 +24,7 @@ import org.apache.camel.ResolveEndpointF
import org.apache.camel.impl.HeaderFilterStrategyComponent;
import org.apache.camel.util.CastUtils;
import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.URISupport;
import org.apache.commons.httpclient.HttpConnectionManager;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
@@ -39,8 +40,8 @@ public class HttpComponent extends Heade
protected HttpClientConfigurer httpClientConfigurer;
protected HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
protected HttpBinding httpBinding;
-
-
+ protected HttpConfiguration httpConfiguration;
+
/**
* Connects the URL specified on the endpoint to the specified processor.
*
@@ -76,38 +77,98 @@ public class HttpComponent extends Heade
// fallback to component configured
configurer = getHttpClientConfigurer();
}
-
- // check the user name and password for basic authentication
- String username = getAndRemoveParameter(parameters, "username", String.class);
- String password = getAndRemoveParameter(parameters, "password", String.class);
- String domain = getAndRemoveParameter(parameters, "domain", String.class);
- String host = getAndRemoveParameter(parameters, "host", String.class);
- if (username != null && password != null) {
- configurer = CompositeHttpConfigurer.combineConfigurers(
- configurer,
- new BasicAuthenticationHttpClientConfigurer(username, password, domain, host));
- }
-
- // check the proxy details for proxy configuration
- String proxyHost = getAndRemoveParameter(parameters, "proxyHost", String.class);
- Integer proxyPort = getAndRemoveParameter(parameters, "proxyPort", Integer.class);
- if (proxyHost != null && proxyPort != null) {
- String proxyUsername = getAndRemoveParameter(parameters, "proxyUsername", String.class);
- String proxyPassword = getAndRemoveParameter(parameters, "proxyPassword", String.class);
- String proxyDomain = getAndRemoveParameter(parameters, "proxyDomain", String.class);
- String proxyNtHost = getAndRemoveParameter(parameters, "proxyNtHost", String.class);
- if (proxyUsername != null && proxyPassword != null) {
- configurer = CompositeHttpConfigurer.combineConfigurers(
- configurer, new ProxyHttpClientConfigurer(proxyHost, proxyPort, proxyUsername, proxyPassword, proxyDomain, proxyNtHost));
- } else {
- configurer = CompositeHttpConfigurer.combineConfigurers(
- configurer, new ProxyHttpClientConfigurer(proxyHost, proxyPort));
- }
+
+ // authentication can be endpoint configured
+ String authUsername = getAndRemoveParameter(parameters, "authUsername", String.class);
+ AuthMethod authMethod = getAndRemoveParameter(parameters, "authMethod", AuthMethod.class);
+ // validate that if auth username is given then the auth method is also provided
+ if (authUsername != null && authMethod == null) {
+ throw new IllegalArgumentException("Option authMethod must be provided to use authentication");
+ }
+ if (authMethod != null) {
+ String authPassword = getAndRemoveParameter(parameters, "authPassword", String.class);
+ String authDomain = getAndRemoveParameter(parameters, "authDomain", String.class);
+ String authHost = getAndRemoveParameter(parameters, "authHost", String.class);
+ configurer = configureAuth(configurer, authMethod, authUsername, authPassword, authDomain, authHost);
+ } else if (httpConfiguration != null) {
+ // or fallback to use component configuration
+ configurer = configureAuth(configurer, httpConfiguration.getAuthMethod(), httpConfiguration.getAuthUsername(),
+ httpConfiguration.getAuthPassword(), httpConfiguration.getAuthDomain(), httpConfiguration.getAuthHost());
+ }
+
+ // proxy authentication can be endpoint configured
+ String proxyAuthUsername = getAndRemoveParameter(parameters, "proxyAuthUsername", String.class);
+ AuthMethod proxyAuthMethod = getAndRemoveParameter(parameters, "proxyAuthMethod", AuthMethod.class);
+ // validate that if proxy auth username is given then the proxy auth method is also provided
+ if (proxyAuthUsername != null && proxyAuthMethod == null) {
+ throw new IllegalArgumentException("Option proxyAuthMethod must be provided to use proxy authentication");
+ }
+ if (proxyAuthMethod != null) {
+ String proxyAuthPassword = getAndRemoveParameter(parameters, "proxyAuthPassword", String.class);
+ String proxyAuthDomain = getAndRemoveParameter(parameters, "proxyAuthDomain", String.class);
+ String proxyAuthHost = getAndRemoveParameter(parameters, "proxyAuthHost", String.class);
+ configurer = configureProxyAuth(configurer, proxyAuthMethod, proxyAuthUsername, proxyAuthPassword, proxyAuthDomain, proxyAuthHost);
+ } else if (httpConfiguration != null) {
+ // or fallback to use component configuration
+ configurer = configureProxyAuth(configurer, httpConfiguration.getProxyAuthMethod(), httpConfiguration.getProxyAuthUsername(),
+ httpConfiguration.getProxyAuthPassword(), httpConfiguration.getProxyAuthDomain(), httpConfiguration.getProxyAuthHost());
}
return configurer;
}
+
+ /**
+ * Configures the authentication method to be used
+ *
+ * @return configurer to used
+ */
+ protected HttpClientConfigurer configureAuth(HttpClientConfigurer configurer, AuthMethod authMethod, String username, String password, String domain, String host) {
+ if (authMethod == null) {
+ return configurer;
+ }
+
+ ObjectHelper.notNull(username, "authUsername");
+ ObjectHelper.notNull(password, "authPassword");
+
+ if (authMethod == AuthMethod.Basic || authMethod == AuthMethod.Digest) {
+ return CompositeHttpConfigurer.combineConfigurers(configurer,
+ new BasicAuthenticationHttpClientConfigurer(false, username, password));
+ } else if (authMethod == AuthMethod.NTML) {
+ // domain is mandatory for NTML
+ ObjectHelper.notNull(domain, "authDomain");
+ return CompositeHttpConfigurer.combineConfigurers(configurer,
+ new NTMLAuthenticationHttpClientConfigurer(false, username, password, domain, host));
+ }
+
+ throw new IllegalArgumentException("Unknown authMethod " + authMethod);
+ }
+ /**
+ * Configures the proxy authentication method to be used
+ *
+ * @return configurer to used
+ */
+ protected HttpClientConfigurer configureProxyAuth(HttpClientConfigurer configurer, AuthMethod authMethod, String username, String password, String domain, String host) {
+ if (authMethod == null) {
+ return configurer;
+ }
+
+ ObjectHelper.notNull(username, "proxyAuthUsername");
+ ObjectHelper.notNull(password, "proxyAuthPassword");
+
+ if (authMethod == AuthMethod.Basic || authMethod == AuthMethod.Digest) {
+ return CompositeHttpConfigurer.combineConfigurers(configurer,
+ new BasicAuthenticationHttpClientConfigurer(true, username, password));
+ } else if (authMethod == AuthMethod.NTML) {
+ // domain is mandatory for NTML
+ ObjectHelper.notNull(domain, "proxyAuthDomain");
+ return CompositeHttpConfigurer.combineConfigurers(configurer,
+ new NTMLAuthenticationHttpClientConfigurer(true, username, password, domain, host));
+ }
+
+ throw new IllegalArgumentException("Unknown proxyAuthMethod " + authMethod);
+ }
+
@Override
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
@@ -120,6 +181,8 @@ public class HttpComponent extends Heade
Boolean throwExceptionOnFailure = getAndRemoveParameter(parameters, "throwExceptionOnFailure", Boolean.class);
Boolean bridgeEndpoint = getAndRemoveParameter(parameters, "bridgeEndpoint", Boolean.class);
Boolean matchOnUriPrefix = getAndRemoveParameter(parameters, "matchOnUriPrefix", Boolean.class);
+ String proxyHost = getAndRemoveParameter(parameters, "proxyHost", String.class);
+ Integer proxyPort = getAndRemoveParameter(parameters, "proxyPort", Integer.class);
// http client can be configured from URI options
HttpClientParams clientParams = new HttpClientParams();
IntrospectionSupport.setProperties(clientParams, parameters, "httpClient.");
@@ -165,6 +228,13 @@ public class HttpComponent extends Heade
if (matchOnUriPrefix != null) {
endpoint.setMatchOnUriPrefix(matchOnUriPrefix);
}
+ if (proxyHost != null) {
+ endpoint.setProxyHost(proxyHost);
+ endpoint.setProxyPort(proxyPort);
+ } else if (httpConfiguration != null) {
+ endpoint.setProxyHost(httpConfiguration.getProxyHost());
+ endpoint.setProxyPort(httpConfiguration.getProxyPort());
+ }
setProperties(endpoint, parameters);
return endpoint;
@@ -199,4 +269,13 @@ public class HttpComponent extends Heade
public void setHttpBinding(HttpBinding httpBinding) {
this.httpBinding = httpBinding;
}
+
+ public HttpConfiguration getHttpConfiguration() {
+ return httpConfiguration;
+ }
+
+ public void setHttpConfiguration(HttpConfiguration httpConfiguration) {
+ this.httpConfiguration = httpConfiguration;
+ }
+
}
Added: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConfiguration.java?rev=933947&view=auto
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConfiguration.java (added)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConfiguration.java Wed Apr 14 13:43:06 2010
@@ -0,0 +1,136 @@
+/**
+ * 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.http;
+
+import java.io.Serializable;
+
+/**
+ * @version $Revision$
+ */
+public class HttpConfiguration implements Serializable {
+
+ private AuthMethod authMethod;
+ private String authUsername;
+ private String authPassword;
+ private String authDomain;
+ private String authHost;
+
+ private AuthMethod proxyAuthMethod;
+ private String proxyAuthUsername;
+ private String proxyAuthPassword;
+ private String proxyAuthDomain;
+ private String proxyAuthHost;
+
+ private String proxyHost;
+ private int proxyPort;
+
+ public String getAuthUsername() {
+ return authUsername;
+ }
+
+ public void setAuthUsername(String authUsername) {
+ this.authUsername = authUsername;
+ }
+
+ public String getAuthPassword() {
+ return authPassword;
+ }
+
+ public void setAuthPassword(String authPassword) {
+ this.authPassword = authPassword;
+ }
+
+ public String getAuthDomain() {
+ return authDomain;
+ }
+
+ public void setAuthDomain(String authDomain) {
+ this.authDomain = authDomain;
+ }
+
+ public String getAuthHost() {
+ return authHost;
+ }
+
+ public void setAuthHost(String authHost) {
+ this.authHost = authHost;
+ }
+
+ public String getProxyAuthUsername() {
+ return proxyAuthUsername;
+ }
+
+ public void setProxyAuthUsername(String proxyAuthUsername) {
+ this.proxyAuthUsername = proxyAuthUsername;
+ }
+
+ public String getProxyAuthPassword() {
+ return proxyAuthPassword;
+ }
+
+ public void setProxyAuthPassword(String proxyAuthPassword) {
+ this.proxyAuthPassword = proxyAuthPassword;
+ }
+
+ public String getProxyAuthDomain() {
+ return proxyAuthDomain;
+ }
+
+ public void setProxyAuthDomain(String proxyAuthDomain) {
+ this.proxyAuthDomain = proxyAuthDomain;
+ }
+
+ public String getProxyAuthHost() {
+ return proxyAuthHost;
+ }
+
+ public void setProxyAuthHost(String proxyAuthHost) {
+ this.proxyAuthHost = proxyAuthHost;
+ }
+
+ public AuthMethod getAuthMethod() {
+ return authMethod;
+ }
+
+ public void setAuthMethod(AuthMethod authMethod) {
+ this.authMethod = authMethod;
+ }
+
+ public AuthMethod getProxyAuthMethod() {
+ return proxyAuthMethod;
+ }
+
+ public void setProxyAuthMethod(AuthMethod proxyAuthMethod) {
+ this.proxyAuthMethod = proxyAuthMethod;
+ }
+
+ public String getProxyHost() {
+ return proxyHost;
+ }
+
+ public void setProxyHost(String proxyHost) {
+ this.proxyHost = proxyHost;
+ }
+
+ public int getProxyPort() {
+ return proxyPort;
+ }
+
+ public void setProxyPort(int proxyPort) {
+ this.proxyPort = proxyPort;
+ }
+}
Propchange: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConfiguration.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
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=933947&r1=933946&r2=933947&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 Wed Apr 14 13:43:06 2010
@@ -49,6 +49,8 @@ public class HttpEndpoint extends Defaul
private boolean bridgeEndpoint;
private boolean matchOnUriPrefix;
private boolean chunked = true;
+ private String proxyHost;
+ private int proxyPort;
public HttpEndpoint() {
}
@@ -99,6 +101,13 @@ public class HttpEndpoint extends Defaul
answer.getHostConfiguration().setProxy(host, port);
}
+ if (proxyHost != null) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Using proxy: " + proxyHost + ":" + proxyPort);
+ }
+ answer.getHostConfiguration().setProxy(proxyHost, proxyPort);
+ }
+
answer.setHttpConnectionManager(httpConnectionManager);
HttpClientConfigurer configurer = getHttpClientConfigurer();
if (configurer != null) {
@@ -243,4 +252,20 @@ public class HttpEndpoint extends Defaul
public void setChunked(boolean chunked) {
this.chunked = chunked;
}
+
+ public String getProxyHost() {
+ return proxyHost;
+ }
+
+ public void setProxyHost(String proxyHost) {
+ this.proxyHost = proxyHost;
+ }
+
+ public int getProxyPort() {
+ return proxyPort;
+ }
+
+ public void setProxyPort(int proxyPort) {
+ this.proxyPort = proxyPort;
+ }
}
Copied: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/NTMLAuthenticationHttpClientConfigurer.java (from r933856, camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/BasicAuthenticationHttpClientConfigurer.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/NTMLAuthenticationHttpClientConfigurer.java?p2=camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/NTMLAuthenticationHttpClientConfigurer.java&p1=camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/BasicAuthenticationHttpClientConfigurer.java&r1=933856&r2=933947&rev=933947&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/BasicAuthenticationHttpClientConfigurer.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/NTMLAuthenticationHttpClientConfigurer.java Wed Apr 14 13:43:06 2010
@@ -19,30 +19,49 @@ package org.apache.camel.component.http;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NTCredentials;
-import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
-public class BasicAuthenticationHttpClientConfigurer implements HttpClientConfigurer {
+public class NTMLAuthenticationHttpClientConfigurer implements HttpClientConfigurer {
+ private final boolean proxy;
private final String username;
private final String password;
private final String domain;
private final String host;
-
- public BasicAuthenticationHttpClientConfigurer(String user, String pwd, String domain, String host) {
- username = user;
- password = pwd;
+
+ public NTMLAuthenticationHttpClientConfigurer(boolean proxy, String user, String pwd, String domain, String host) {
+ this.proxy = proxy;
+ this.username = user;
+ this.password = pwd;
this.domain = domain;
this.host = host;
}
public void configureHttpClient(HttpClient client) {
- Credentials defaultcreds;
- if (domain != null) {
- defaultcreds = new NTCredentials(username, password, host, domain);
+ Credentials credentials = new NTCredentials(username, password, host, domain);
+ if (proxy) {
+ client.getState().setProxyCredentials(AuthScope.ANY, credentials);
} else {
- defaultcreds = new UsernamePasswordCredentials(username, password);
+ client.getState().setCredentials(AuthScope.ANY, credentials);
}
- client.getState().setCredentials(AuthScope.ANY, defaultcreds);
}
-}
+ public boolean isProxy() {
+ return proxy;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+
+ public String getHost() {
+ return host;
+ }
+}
\ No newline at end of file
Copied: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthBasicTest.java (from r933856, camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpClientConfigurerTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthBasicTest.java?p2=camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthBasicTest.java&p1=camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpClientConfigurerTest.java&r1=933856&r2=933947&rev=933947&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpClientConfigurerTest.java (original)
+++ camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthBasicTest.java Wed Apr 14 13:43:06 2010
@@ -23,22 +23,37 @@ import org.junit.Test;
/**
* @version $Revision: 905992 $
*/
-public class HttpClientConfigurerTest extends CamelTestSupport {
- private HttpClientConfigurer configurer;
-
+public class HttpProxyAuthBasicTest extends CamelTestSupport {
+
@Test
- public void testHttpClientConfigurer() throws Exception {
- HttpClientConfigurer gotConfigurer = getMandatoryEndpoint("http://www.google.com/search", HttpEndpoint.class).getHttpClientConfigurer();
- assertSame(configurer, gotConfigurer);
+ public void testProxyAuthBasic() throws Exception {
+ HttpClientConfigurer configurer = getMandatoryEndpoint("http://www.google.com/search", HttpEndpoint.class).getHttpClientConfigurer();
+ assertNotNull(configurer);
+
+ CompositeHttpConfigurer comp = assertIsInstanceOf(CompositeHttpConfigurer.class, configurer);
+ assertEquals(1, comp.getConfigurers().size());
+
+ BasicAuthenticationHttpClientConfigurer basic = assertIsInstanceOf(BasicAuthenticationHttpClientConfigurer.class, comp.getConfigurers().get(0));
+ assertTrue(basic.isProxy());
+ assertEquals("myUser", basic.getUsername());
+ assertEquals("myPassword", basic.getPassword());
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() {
- // add configurer to http component
- configurer = new ProxyHttpClientConfigurer("proxyhost", 80, "user", "password", null, null);
- getContext().getComponent("http", HttpComponent.class).setHttpClientConfigurer(configurer);
+ // setup proxy details
+ HttpConfiguration config = new HttpConfiguration();
+ config.setProxyHost("myProxyHosy");
+ config.setProxyPort(1234);
+ // proxy requires auth as well
+ config.setProxyAuthMethod(AuthMethod.Basic);
+ config.setProxyAuthUsername("myUser");
+ config.setProxyAuthPassword("myPassword");
+
+ HttpComponent http = context.getComponent("http", HttpComponent.class);
+ http.setHttpConfiguration(config);
from("direct:start")
.to("http://www.google.com/search");
Propchange: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthBasicTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthDigestTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthDigestTest.java?rev=933947&view=auto
==============================================================================
--- camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthDigestTest.java (added)
+++ camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthDigestTest.java Wed Apr 14 13:43:06 2010
@@ -0,0 +1,60 @@
+/**
+ * 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.http;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ * @version $Revision$
+ */
+public class HttpProxyAuthDigestTest extends CamelTestSupport {
+
+ @Test
+ public void testProxyAuthDigest() throws Exception {
+ HttpClientConfigurer configurer = getMandatoryEndpoint("http://www.google.com/search", HttpEndpoint.class).getHttpClientConfigurer();
+ assertNotNull(configurer);
+
+ CompositeHttpConfigurer comp = assertIsInstanceOf(CompositeHttpConfigurer.class, configurer);
+ assertEquals(1, comp.getConfigurers().size());
+
+ BasicAuthenticationHttpClientConfigurer basic = assertIsInstanceOf(BasicAuthenticationHttpClientConfigurer.class, comp.getConfigurers().get(0));
+ assertTrue(basic.isProxy());
+ assertEquals("myUser", basic.getUsername());
+ assertEquals("myPassword", basic.getPassword());
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ // setup proxy details
+ HttpConfiguration config = new HttpConfiguration();
+ config.setProxyAuthMethod(AuthMethod.Digest);
+ config.setProxyAuthUsername("myUser");
+ config.setProxyAuthPassword("myPassword");
+
+ HttpComponent http = context.getComponent("http", HttpComponent.class);
+ http.setHttpConfiguration(config);
+
+ from("direct:start")
+ .to("http://www.google.com/search");
+ }
+ };
+ }
+}
\ No newline at end of file
Propchange: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthDigestTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthDigestTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthNTLMTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthNTLMTest.java?rev=933947&view=auto
==============================================================================
--- camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthNTLMTest.java (added)
+++ camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthNTLMTest.java Wed Apr 14 13:43:06 2010
@@ -0,0 +1,67 @@
+/**
+ * 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.http;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ * @version $Revision$
+ */
+public class HttpProxyAuthNTLMTest extends CamelTestSupport {
+
+ @Test
+ public void testProxyAuthNTLM() throws Exception {
+ HttpClientConfigurer configurer = getMandatoryEndpoint("http://www.google.com/search", HttpEndpoint.class).getHttpClientConfigurer();
+ assertNotNull(configurer);
+
+ CompositeHttpConfigurer comp = assertIsInstanceOf(CompositeHttpConfigurer.class, configurer);
+ assertEquals(1, comp.getConfigurers().size());
+
+ NTMLAuthenticationHttpClientConfigurer ntlm = assertIsInstanceOf(NTMLAuthenticationHttpClientConfigurer.class, comp.getConfigurers().get(0));
+ assertTrue(ntlm.isProxy());
+ assertEquals("myUser", ntlm.getUsername());
+ assertEquals("myPassword", ntlm.getPassword());
+ assertEquals("myDomain", ntlm.getDomain());
+ assertEquals("myHost", ntlm.getHost());
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ // setup proxy details
+ HttpConfiguration config = new HttpConfiguration();
+ config.setProxyHost("myProxyHosy");
+ config.setProxyPort(1234);
+
+ config.setProxyAuthMethod(AuthMethod.NTML);
+ config.setProxyAuthUsername("myUser");
+ config.setProxyAuthPassword("myPassword");
+ config.setProxyAuthDomain("myDomain");
+ config.setProxyAuthHost("myHost");
+
+ HttpComponent http = context.getComponent("http", HttpComponent.class);
+ http.setHttpConfiguration(config);
+
+ from("direct:start")
+ .to("http://www.google.com/search");
+ }
+ };
+ }
+}
\ No newline at end of file
Propchange: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthNTLMTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyAuthNTLMTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyTest.java?rev=933947&r1=933946&r2=933947&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyTest.java (original)
+++ camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyTest.java Wed Apr 14 13:43:06 2010
@@ -18,7 +18,6 @@ package org.apache.camel.component.http;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.apache.commons.httpclient.HttpClient;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -27,7 +26,6 @@ import org.junit.Test;
public class HttpProxyTest extends CamelTestSupport {
@Test
- @Ignore("ignore online tests, will be improved in Camel 2.3")
public void testNoHttpProxyConfigured() throws Exception {
HttpEndpoint http = context.getEndpoint("http://www.google.com", HttpEndpoint.class);
@@ -37,7 +35,6 @@ public class HttpProxyTest extends Camel
}
@Test
- @Ignore("ignore online tests, will be improved in Camel 2.3")
public void testHttpProxyConfigured() throws Exception {
HttpEndpoint http = context.getEndpoint("http://www.google.com", HttpEndpoint.class);
@@ -55,7 +52,6 @@ public class HttpProxyTest extends Camel
}
@Test
- @Ignore("ignore online tests, will be improved in Camel 2.3")
public void testHttpProxyEndpointConfigured() throws Exception {
HttpEndpoint http = context.getEndpoint("http://www.google.com?proxyHost=myotherproxy&proxyPort=2345", HttpEndpoint.class);
@@ -72,4 +68,28 @@ public class HttpProxyTest extends Camel
}
}
+ @Test
+ public void testHttpProxyComponentConfigured() throws Exception {
+ HttpConfiguration config = new HttpConfiguration();
+ config.setProxyHost("myotherproxy");
+ config.setProxyPort(2345);
+
+ HttpComponent comp = context.getComponent("http", HttpComponent.class);
+ comp.setHttpConfiguration(config);
+
+ HttpEndpoint http = context.getEndpoint("http://www.google.com", HttpEndpoint.class);
+
+ context.getProperties().put("http.proxyHost", "myproxy");
+ context.getProperties().put("http.proxyPort", "1234");
+
+ try {
+ HttpClient client = http.createHttpClient();
+ assertEquals("myotherproxy", client.getHostConfiguration().getProxyHost());
+ assertEquals(2345, client.getHostConfiguration().getProxyPort());
+ } finally {
+ context.getProperties().remove("http.proxyHost");
+ context.getProperties().remove("http.proxyPort");
+ }
+ }
+
}
Copied: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthComponentConfiguredTest.java (from r933856, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthComponentConfiguredTest.java?p2=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthComponentConfiguredTest.java&p1=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthTest.java&r1=933856&r2=933947&rev=933947&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthComponentConfiguredTest.java Wed Apr 14 13:43:06 2010
@@ -18,12 +18,14 @@ package org.apache.camel.component.jetty
import java.io.IOException;
import java.security.Principal;
-
import javax.servlet.http.HttpServletRequest;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.http.AuthMethod;
+import org.apache.camel.component.http.HttpComponent;
+import org.apache.camel.component.http.HttpConfiguration;
import org.apache.camel.impl.JndiRegistry;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.eclipse.jetty.http.security.Constraint;
@@ -37,7 +39,7 @@ import org.junit.Test;
/**
* @version $Revision$
*/
-public class HttpBasicAuthTest extends CamelTestSupport {
+public class HttpBasicAuthComponentConfiguredTest extends CamelTestSupport {
@Override
protected JndiRegistry createRegistry() throws Exception {
@@ -57,7 +59,7 @@ public class HttpBasicAuthTest extends C
ConstraintSecurityHandler sh = new ConstraintSecurityHandler();
sh.setAuthenticator(new BasicAuthenticator());
sh.setConstraintMappings(new ConstraintMapping[] {cm});
-
+
HashLoginService loginService = new HashLoginService("MyRealm", "src/test/resources/myRealm.properties");
sh.setLoginService(loginService);
sh.setConstraintMappings(new ConstraintMapping[]{cm});
@@ -67,7 +69,7 @@ public class HttpBasicAuthTest extends C
@Test
public void testHttpBaiscAuth() throws Exception {
- String out = template.requestBody("http://localhost:9080/test?username=donald&password=duck", "Hello World", String.class);
+ String out = template.requestBody("http://localhost:9080/test", "Hello World", String.class);
assertEquals("Bye World", out);
}
@@ -76,6 +78,14 @@ public class HttpBasicAuthTest extends C
return new RouteBuilder() {
@Override
public void configure() throws Exception {
+ HttpConfiguration config = new HttpConfiguration();
+ config.setAuthMethod(AuthMethod.Basic);
+ config.setAuthUsername("donald");
+ config.setAuthPassword("duck");
+
+ HttpComponent http = context.getComponent("http", HttpComponent.class);
+ http.setHttpConfiguration(config);
+
from("jetty://http://localhost:9080/test?handlers=myAuthHandler")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
@@ -90,4 +100,4 @@ public class HttpBasicAuthTest extends C
}
};
}
-}
+}
\ No newline at end of file
Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthTest.java?rev=933947&r1=933946&r2=933947&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthTest.java Wed Apr 14 13:43:06 2010
@@ -23,7 +23,9 @@ import javax.servlet.http.HttpServletReq
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
+import org.apache.camel.RuntimeCamelException;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.http.HttpOperationFailedException;
import org.apache.camel.impl.JndiRegistry;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.eclipse.jetty.http.security.Constraint;
@@ -67,10 +69,20 @@ public class HttpBasicAuthTest extends C
@Test
public void testHttpBaiscAuth() throws Exception {
- String out = template.requestBody("http://localhost:9080/test?username=donald&password=duck", "Hello World", String.class);
+ String out = template.requestBody("http://localhost:9080/test?authMethod=Basic&authUsername=donald&authPassword=duck", "Hello World", String.class);
assertEquals("Bye World", out);
}
+ @Test
+ public void testHttpBaiscAuthInvalidPassword() throws Exception {
+ try {
+ template.requestBody("http://localhost:9080/test?authMethod=Basic&authUsername=donald&authPassword=sorry", "Hello World", String.class);
+ } catch (RuntimeCamelException e) {
+ HttpOperationFailedException cause = assertIsInstanceOf(HttpOperationFailedException.class, e.getCause());
+ assertEquals(401, cause.getStatusCode());
+ }
+ }
+
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {