Author: gertv
Date: Mon May 28 11:44:16 2007
New Revision: 542291

URL: http://svn.apache.org/viewvc?view=rev&rev=542291
Log:
Fix for SM-598: Dynamically determine basic authentication credentials for HTTP

Modified:
    
incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/BasicAuthCredentials.java
    
incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/processors/ProviderProcessor.java

Modified: 
incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/BasicAuthCredentials.java
URL: 
http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/BasicAuthCredentials.java?view=diff&rev=542291&r1=542290&r2=542291
==============================================================================
--- 
incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/BasicAuthCredentials.java
 (original)
+++ 
incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/BasicAuthCredentials.java
 Mon May 28 11:44:16 2007
@@ -16,10 +16,15 @@
  */
 package org.apache.servicemix.http;
 
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+import javax.jbi.messaging.NormalizedMessage;
+
 import org.apache.commons.httpclient.Credentials;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.UsernamePasswordCredentials;
 import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.servicemix.expression.Expression;
 
 /**
  * @author roehl.sioson
@@ -28,8 +33,8 @@
  */
 public class BasicAuthCredentials {
 
-    protected String username;
-    protected String password;
+    protected Expression username;
+    protected Expression password;
 
     public BasicAuthCredentials() {
     }
@@ -37,50 +42,61 @@
     /**
      * @return Returns the username.
      */
-    public String getUsername() {
+    public Expression getUsername() {
         return username;
     }
 
     /**
      * @param ssl The username to set.
      */
-    public void setUsername(String username) {
+    public void setUsername(Expression username) {
         this.username = username;
     }
 
     /**
      * @return Returns the password.
      */
-    public String getPassword() {
+    public Expression getPassword() {
         return password;
     }
 
     /**
      * @param ssl The password to set.
      */
-    public void setPassword(String password) {
+    public void setPassword(Expression password) {
         this.password = password;
     }
 
-    /**
+
+       /**
      * Applies this authentication to the given method.
      *
-     * @param method The method to receive authentication headers.
+     * @param client the client on which to set the authentication information
+     * @param exchange the message exchange to be used for evaluating the 
expression
+     * @param message the normalized message to be used for evaluating the 
expression
+        * @throws MessagingException if the correct value for 
username/password cannot be determined when using an expression
      */
-    public void applyCredentials(HttpClient client) {
+    public void applyCredentials(HttpClient client, MessageExchange exchange, 
NormalizedMessage message) throws MessagingException {
         AuthScope scope = new AuthScope(AuthScope.ANY_HOST, 
AuthScope.ANY_PORT);
-        Credentials credentials = new 
UsernamePasswordCredentials(this.username, this.password);
+        Credentials credentials = 
+               new UsernamePasswordCredentials((String) 
this.username.evaluate(exchange, message), 
+                                                                               
(String) this.password.evaluate(exchange, message));
         client.getState().setCredentials(scope, credentials);
     }
-
+    
     /**
      * Applies this authentication to the given method.
      *
-     * @param method The method to receive authentication headers.
+     * @param client the client on which to set the authentication information
+     * @param exchange the message exchange to be used for evaluating the 
expression
+     * @param message the normalized message to be used for evaluating the 
expression
+     * @throws MessagingException if the correct value for user name/password 
cannot be determined when using an expression
      */
-    public void applyProxyCredentials(HttpClient client) {
+    public void applyProxyCredentials(HttpClient client, MessageExchange 
exchange, NormalizedMessage message) throws MessagingException {
         AuthScope scope = new AuthScope(AuthScope.ANY_HOST, 
AuthScope.ANY_PORT);
-        Credentials credentials = new 
UsernamePasswordCredentials(this.username, this.password);
+        Credentials credentials = 
+               new UsernamePasswordCredentials((String) 
this.username.evaluate(exchange, message), 
+                                                                               
(String) this.password.evaluate(exchange, message));
         client.getState().setProxyCredentials(scope, credentials);
     }
 

Modified: 
incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/processors/ProviderProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/processors/ProviderProcessor.java?view=diff&rev=542291&r1=542290&r2=542291
==============================================================================
--- 
incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/processors/ProviderProcessor.java
 (original)
+++ 
incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-http/src/main/java/org/apache/servicemix/http/processors/ProviderProcessor.java
 Mon May 28 11:44:16 2007
@@ -151,10 +151,10 @@
             method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
new DefaultHttpMethodRetryHandler(retries, true));
             // Set authentication
             if (endpoint.getBasicAuthentication() != null) {
-                
endpoint.getBasicAuthentication().applyCredentials(getClient());
+                
endpoint.getBasicAuthentication().applyCredentials(getClient(), exchange, nm);
             }
             // Execute the HTTP method
-            int response = 
getClient().executeMethod(getHostConfiguration(locationURI), method);
+            int response = 
getClient().executeMethod(getHostConfiguration(locationURI, exchange, nm), 
method);
             if (response != HttpStatus.SC_OK && response != 
HttpStatus.SC_ACCEPTED) {
                 if (!(exchange instanceof InOnly)) {
                     SoapReader reader = 
soapHelper.getSoapMarshaler().createReader();
@@ -256,7 +256,7 @@
         return close;
     }
 
-    private HostConfiguration getHostConfiguration(String locationURI) throws 
Exception {
+    private HostConfiguration getHostConfiguration(String locationURI, 
MessageExchange exchange, NormalizedMessage message) throws Exception {
         HostConfiguration host;
         URI uri = new URI(locationURI, false);
         if (uri.getScheme().equals("https")) {
@@ -280,7 +280,7 @@
                 host.setProxy(endpoint.getProxy().getProxyHost(), 
endpoint.getProxy().getProxyPort());
             }
             if (endpoint.getProxy().getProxyCredentials() != null) {
-                
endpoint.getProxy().getProxyCredentials().applyProxyCredentials(getClient());
+                
endpoint.getProxy().getProxyCredentials().applyProxyCredentials(getClient(), 
exchange, message);
             }
         } else if ((getConfiguration().getProxyHost() != null) && 
(getConfiguration().getProxyPort() != 0)) {
             host.setProxy(getConfiguration().getProxyHost(), 
getConfiguration().getProxyPort());


Reply via email to