You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2010/09/23 11:11:58 UTC

svn commit: r1000365 - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings: CmisBindingFactory.java spi/NTLMAuthenticationProvider.java

Author: fmui
Date: Thu Sep 23 09:11:58 2010
New Revision: 1000365

URL: http://svn.apache.org/viewvc?rev=1000365&view=rev
Log:
added NTLM authentication provider

Added:
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java   (with props)
Modified:
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java?rev=1000365&r1=1000364&r2=1000365&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java Thu Sep 23 09:11:58 2010
@@ -22,6 +22,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingImpl;
+import org.apache.chemistry.opencmis.client.bindings.spi.AbstractAuthenticationProvider;
 import org.apache.chemistry.opencmis.commons.SessionParameter;
 import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
 
@@ -39,7 +40,10 @@ public final class CmisBindingFactory {
 
     /** Standard authentication provider class */
     public static final String STANDARD_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.StandardAuthenticationProvider";
+    /** NTLM authentication provider class */
+    public static final String NTLM_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.NTLMAuthenticationProvider";
 
+    
     private Map<String, String> defaults;
 
     /**

Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java?rev=1000365&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java Thu Sep 23 09:11:58 2010
@@ -0,0 +1,106 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.spi;
+
+import java.net.Authenticator;
+import java.net.PasswordAuthentication;
+import java.util.List;
+import java.util.Map;
+
+import org.w3c.dom.Element;
+
+/**
+ * NTLM authentication provider class. USE WITH CARE!
+ * 
+ * This authentication provider sets a {@link java.net.Authenticator} which will
+ * replace the current authenticator, if any. It will fail if this authenticator
+ * will be replaced by another part of the code.
+ * 
+ * Since {@link java.net.Authenticator} is a system-wide authenticator, it will
+ * not reliably work in multi-user environments! To achieve that you have to
+ * wrap OpenCMIS into its own class loader.
+ */
+public class NTLMAuthenticationProvider extends AbstractAuthenticationProvider {
+
+    private static final long serialVersionUID = 1L;
+
+    // java.net.Authenticator is static, so this can be static too
+    private final static OpenCMISAuthenticator authenticator = new OpenCMISAuthenticator();
+    static {
+        Authenticator.setDefault(authenticator);
+    }
+
+    @Override
+    public Map<String, List<String>> getHTTPHeaders(String url) {
+        // get user and password
+        String user = getUser();
+        String password = getPassword();
+
+        // if no user is set, reset the authenticator
+        if (user == null) {
+            authenticator.reset();
+            return null;
+        }
+
+        if (password == null) {
+            password = "";
+        }
+
+        // set user and password
+        authenticator.setPasswordAuthentication(user, password);
+
+        // OpenCMIS is not in charge of the authentication
+        // -> no HTTP header to set
+        return null;
+    }
+
+    @Override
+    public Element getSOAPHeaders(Object portObject) {
+        // no SOAP headers to set
+        return null;
+    }
+
+    /**
+     * OpenCMIS Authenticator class.
+     */
+    static class OpenCMISAuthenticator extends Authenticator {
+
+        private PasswordAuthentication passwordAuthentication = null;
+
+        /**
+         * Resets the user and password. The next request will not be
+         * authenticated.
+         */
+        public synchronized void reset() {
+            passwordAuthentication = null;
+        }
+
+        /**
+         * Sets a new user and password.
+         */
+        public synchronized void setPasswordAuthentication(String user, String password) {
+            passwordAuthentication = new PasswordAuthentication(user, password.toCharArray());
+        }
+
+        @Override
+        protected synchronized PasswordAuthentication getPasswordAuthentication() {
+            return passwordAuthentication;
+        }
+    }
+}

Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native



Re: svn commit: r1000365 - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings: CmisBindingFactory.java spi/NTLMAuthenticationProvider.java

Posted by Florent Guillaume <fg...@nuxeo.com>.
If there are no other use cases besides NTLM than I guess the current
name is ok.

Florent

On Thu, Sep 23, 2010 at 4:40 PM, Florian Müller
<fl...@alfresco.com> wrote:
> Well, it's the only way to get Javas build-in NTLM support to kick in. It
> also supports HTTP basic authentication but you really shouldn't use it for
> that.
>
> We can rename the class but that would hide it's purpose. It should really
> only be used if NTLM is desperately needed.
>
>
> Florian
>
>
> On 23/09/2010 15:27, Florent Guillaume wrote:
>>
>> Shouldn't NTLMAuthenticationProvider be named
>> JavaNetAuthenticationProvider, or something like that? There's
>> actually nothing NTLM-specific about it...
>>
>> Florent
>>
>> On Thu, Sep 23, 2010 at 11:11 AM,<fm...@apache.org>  wrote:
>>>
>>> Author: fmui
>>> Date: Thu Sep 23 09:11:58 2010
>>> New Revision: 1000365
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1000365&view=rev
>>> Log:
>>> added NTLM authentication provider
>>>
>>> Added:
>>>
>>>  incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
>>>   (with props)
>>> Modified:
>>>
>>>  incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
>>>
>>> Modified:
>>> incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java?rev=1000365&r1=1000364&r2=1000365&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
>>> (original)
>>> +++
>>> incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
>>> Thu Sep 23 09:11:58 2010
>>> @@ -22,6 +22,7 @@ import java.util.HashMap;
>>>  import java.util.Map;
>>>
>>>  import
>>> org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingImpl;
>>> +import
>>> org.apache.chemistry.opencmis.client.bindings.spi.AbstractAuthenticationProvider;
>>>  import org.apache.chemistry.opencmis.commons.SessionParameter;
>>>  import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
>>>
>>> @@ -39,7 +40,10 @@ public final class CmisBindingFactory {
>>>
>>>     /** Standard authentication provider class */
>>>     public static final String STANDARD_AUTHENTICATION_PROVIDER =
>>> "org.apache.chemistry.opencmis.client.bindings.spi.StandardAuthenticationProvider";
>>> +    /** NTLM authentication provider class */
>>> +    public static final String NTLM_AUTHENTICATION_PROVIDER =
>>> "org.apache.chemistry.opencmis.client.bindings.spi.NTLMAuthenticationProvider";
>>>
>>> +
>>>     private Map<String, String>  defaults;
>>>
>>>     /**
>>>
>>> Added:
>>> incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java?rev=1000365&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
>>> (added)
>>> +++
>>> incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
>>> Thu Sep 23 09:11:58 2010
>>> @@ -0,0 +1,106 @@
>>> +/*
>>> + * 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.chemistry.opencmis.client.bindings.spi;
>>> +
>>> +import java.net.Authenticator;
>>> +import java.net.PasswordAuthentication;
>>> +import java.util.List;
>>> +import java.util.Map;
>>> +
>>> +import org.w3c.dom.Element;
>>> +
>>> +/**
>>> + * NTLM authentication provider class. USE WITH CARE!
>>> + *
>>> + * This authentication provider sets a {@link java.net.Authenticator}
>>> which will
>>> + * replace the current authenticator, if any. It will fail if this
>>> authenticator
>>> + * will be replaced by another part of the code.
>>> + *
>>> + * Since {@link java.net.Authenticator} is a system-wide authenticator,
>>> it will
>>> + * not reliably work in multi-user environments! To achieve that you
>>> have to
>>> + * wrap OpenCMIS into its own class loader.
>>> + */
>>> +public class NTLMAuthenticationProvider extends
>>> AbstractAuthenticationProvider {
>>> +
>>> +    private static final long serialVersionUID = 1L;
>>> +
>>> +    // java.net.Authenticator is static, so this can be static too
>>> +    private final static OpenCMISAuthenticator authenticator = new
>>> OpenCMISAuthenticator();
>>> +    static {
>>> +        Authenticator.setDefault(authenticator);
>>> +    }
>>> +
>>> +    @Override
>>> +    public Map<String, List<String>>  getHTTPHeaders(String url) {
>>> +        // get user and password
>>> +        String user = getUser();
>>> +        String password = getPassword();
>>> +
>>> +        // if no user is set, reset the authenticator
>>> +        if (user == null) {
>>> +            authenticator.reset();
>>> +            return null;
>>> +        }
>>> +
>>> +        if (password == null) {
>>> +            password = "";
>>> +        }
>>> +
>>> +        // set user and password
>>> +        authenticator.setPasswordAuthentication(user, password);
>>> +
>>> +        // OpenCMIS is not in charge of the authentication
>>> +        // ->  no HTTP header to set
>>> +        return null;
>>> +    }
>>> +
>>> +    @Override
>>> +    public Element getSOAPHeaders(Object portObject) {
>>> +        // no SOAP headers to set
>>> +        return null;
>>> +    }
>>> +
>>> +    /**
>>> +     * OpenCMIS Authenticator class.
>>> +     */
>>> +    static class OpenCMISAuthenticator extends Authenticator {
>>> +
>>> +        private PasswordAuthentication passwordAuthentication = null;
>>> +
>>> +        /**
>>> +         * Resets the user and password. The next request will not be
>>> +         * authenticated.
>>> +         */
>>> +        public synchronized void reset() {
>>> +            passwordAuthentication = null;
>>> +        }
>>> +
>>> +        /**
>>> +         * Sets a new user and password.
>>> +         */
>>> +        public synchronized void setPasswordAuthentication(String user,
>>> String password) {
>>> +            passwordAuthentication = new PasswordAuthentication(user,
>>> password.toCharArray());
>>> +        }
>>> +
>>> +        @Override
>>> +        protected synchronized PasswordAuthentication
>>> getPasswordAuthentication() {
>>> +            return passwordAuthentication;
>>> +        }
>>> +    }
>>> +}
>>>
>>> Propchange:
>>> incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
>>>
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>>
>>>
>>>
>>
>>
>>
>
>



-- 
Florent Guillaume, Director of R&D, Nuxeo
Open Source, Java EE based, Enterprise Content Management (ECM)
http://www.nuxeo.com   http://www.nuxeo.org   +33 1 40 33 79 87

Re: svn commit: r1000365 - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings: CmisBindingFactory.java spi/NTLMAuthenticationProvider.java

Posted by Florian Müller <fl...@alfresco.com>.
Well, it's the only way to get Javas build-in NTLM support to kick in. 
It also supports HTTP basic authentication but you really shouldn't use 
it for that.

We can rename the class but that would hide it's purpose. It should 
really only be used if NTLM is desperately needed.


Florian


On 23/09/2010 15:27, Florent Guillaume wrote:
> Shouldn't NTLMAuthenticationProvider be named
> JavaNetAuthenticationProvider, or something like that? There's
> actually nothing NTLM-specific about it...
>
> Florent
>
> On Thu, Sep 23, 2010 at 11:11 AM,<fm...@apache.org>  wrote:
>> Author: fmui
>> Date: Thu Sep 23 09:11:58 2010
>> New Revision: 1000365
>>
>> URL: http://svn.apache.org/viewvc?rev=1000365&view=rev
>> Log:
>> added NTLM authentication provider
>>
>> Added:
>>     incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java   (with props)
>> Modified:
>>     incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
>>
>> Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
>> URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java?rev=1000365&r1=1000364&r2=1000365&view=diff
>> ==============================================================================
>> --- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java (original)
>> +++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java Thu Sep 23 09:11:58 2010
>> @@ -22,6 +22,7 @@ import java.util.HashMap;
>>   import java.util.Map;
>>
>>   import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingImpl;
>> +import org.apache.chemistry.opencmis.client.bindings.spi.AbstractAuthenticationProvider;
>>   import org.apache.chemistry.opencmis.commons.SessionParameter;
>>   import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
>>
>> @@ -39,7 +40,10 @@ public final class CmisBindingFactory {
>>
>>      /** Standard authentication provider class */
>>      public static final String STANDARD_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.StandardAuthenticationProvider";
>> +    /** NTLM authentication provider class */
>> +    public static final String NTLM_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.NTLMAuthenticationProvider";
>>
>> +
>>      private Map<String, String>  defaults;
>>
>>      /**
>>
>> Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
>> URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java?rev=1000365&view=auto
>> ==============================================================================
>> --- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java (added)
>> +++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java Thu Sep 23 09:11:58 2010
>> @@ -0,0 +1,106 @@
>> +/*
>> + * 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.chemistry.opencmis.client.bindings.spi;
>> +
>> +import java.net.Authenticator;
>> +import java.net.PasswordAuthentication;
>> +import java.util.List;
>> +import java.util.Map;
>> +
>> +import org.w3c.dom.Element;
>> +
>> +/**
>> + * NTLM authentication provider class. USE WITH CARE!
>> + *
>> + * This authentication provider sets a {@link java.net.Authenticator} which will
>> + * replace the current authenticator, if any. It will fail if this authenticator
>> + * will be replaced by another part of the code.
>> + *
>> + * Since {@link java.net.Authenticator} is a system-wide authenticator, it will
>> + * not reliably work in multi-user environments! To achieve that you have to
>> + * wrap OpenCMIS into its own class loader.
>> + */
>> +public class NTLMAuthenticationProvider extends AbstractAuthenticationProvider {
>> +
>> +    private static final long serialVersionUID = 1L;
>> +
>> +    // java.net.Authenticator is static, so this can be static too
>> +    private final static OpenCMISAuthenticator authenticator = new OpenCMISAuthenticator();
>> +    static {
>> +        Authenticator.setDefault(authenticator);
>> +    }
>> +
>> +    @Override
>> +    public Map<String, List<String>>  getHTTPHeaders(String url) {
>> +        // get user and password
>> +        String user = getUser();
>> +        String password = getPassword();
>> +
>> +        // if no user is set, reset the authenticator
>> +        if (user == null) {
>> +            authenticator.reset();
>> +            return null;
>> +        }
>> +
>> +        if (password == null) {
>> +            password = "";
>> +        }
>> +
>> +        // set user and password
>> +        authenticator.setPasswordAuthentication(user, password);
>> +
>> +        // OpenCMIS is not in charge of the authentication
>> +        // ->  no HTTP header to set
>> +        return null;
>> +    }
>> +
>> +    @Override
>> +    public Element getSOAPHeaders(Object portObject) {
>> +        // no SOAP headers to set
>> +        return null;
>> +    }
>> +
>> +    /**
>> +     * OpenCMIS Authenticator class.
>> +     */
>> +    static class OpenCMISAuthenticator extends Authenticator {
>> +
>> +        private PasswordAuthentication passwordAuthentication = null;
>> +
>> +        /**
>> +         * Resets the user and password. The next request will not be
>> +         * authenticated.
>> +         */
>> +        public synchronized void reset() {
>> +            passwordAuthentication = null;
>> +        }
>> +
>> +        /**
>> +         * Sets a new user and password.
>> +         */
>> +        public synchronized void setPasswordAuthentication(String user, String password) {
>> +            passwordAuthentication = new PasswordAuthentication(user, password.toCharArray());
>> +        }
>> +
>> +        @Override
>> +        protected synchronized PasswordAuthentication getPasswordAuthentication() {
>> +            return passwordAuthentication;
>> +        }
>> +    }
>> +}
>>
>> Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>>
>>
>
>
>


Re: svn commit: r1000365 - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings: CmisBindingFactory.java spi/NTLMAuthenticationProvider.java

Posted by Florent Guillaume <fg...@nuxeo.com>.
Shouldn't NTLMAuthenticationProvider be named
JavaNetAuthenticationProvider, or something like that? There's
actually nothing NTLM-specific about it...

Florent

On Thu, Sep 23, 2010 at 11:11 AM,  <fm...@apache.org> wrote:
> Author: fmui
> Date: Thu Sep 23 09:11:58 2010
> New Revision: 1000365
>
> URL: http://svn.apache.org/viewvc?rev=1000365&view=rev
> Log:
> added NTLM authentication provider
>
> Added:
>    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java   (with props)
> Modified:
>    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
>
> Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
> URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java?rev=1000365&r1=1000364&r2=1000365&view=diff
> ==============================================================================
> --- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java (original)
> +++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java Thu Sep 23 09:11:58 2010
> @@ -22,6 +22,7 @@ import java.util.HashMap;
>  import java.util.Map;
>
>  import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingImpl;
> +import org.apache.chemistry.opencmis.client.bindings.spi.AbstractAuthenticationProvider;
>  import org.apache.chemistry.opencmis.commons.SessionParameter;
>  import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
>
> @@ -39,7 +40,10 @@ public final class CmisBindingFactory {
>
>     /** Standard authentication provider class */
>     public static final String STANDARD_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.StandardAuthenticationProvider";
> +    /** NTLM authentication provider class */
> +    public static final String NTLM_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.NTLMAuthenticationProvider";
>
> +
>     private Map<String, String> defaults;
>
>     /**
>
> Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
> URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java?rev=1000365&view=auto
> ==============================================================================
> --- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java (added)
> +++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java Thu Sep 23 09:11:58 2010
> @@ -0,0 +1,106 @@
> +/*
> + * 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.chemistry.opencmis.client.bindings.spi;
> +
> +import java.net.Authenticator;
> +import java.net.PasswordAuthentication;
> +import java.util.List;
> +import java.util.Map;
> +
> +import org.w3c.dom.Element;
> +
> +/**
> + * NTLM authentication provider class. USE WITH CARE!
> + *
> + * This authentication provider sets a {@link java.net.Authenticator} which will
> + * replace the current authenticator, if any. It will fail if this authenticator
> + * will be replaced by another part of the code.
> + *
> + * Since {@link java.net.Authenticator} is a system-wide authenticator, it will
> + * not reliably work in multi-user environments! To achieve that you have to
> + * wrap OpenCMIS into its own class loader.
> + */
> +public class NTLMAuthenticationProvider extends AbstractAuthenticationProvider {
> +
> +    private static final long serialVersionUID = 1L;
> +
> +    // java.net.Authenticator is static, so this can be static too
> +    private final static OpenCMISAuthenticator authenticator = new OpenCMISAuthenticator();
> +    static {
> +        Authenticator.setDefault(authenticator);
> +    }
> +
> +    @Override
> +    public Map<String, List<String>> getHTTPHeaders(String url) {
> +        // get user and password
> +        String user = getUser();
> +        String password = getPassword();
> +
> +        // if no user is set, reset the authenticator
> +        if (user == null) {
> +            authenticator.reset();
> +            return null;
> +        }
> +
> +        if (password == null) {
> +            password = "";
> +        }
> +
> +        // set user and password
> +        authenticator.setPasswordAuthentication(user, password);
> +
> +        // OpenCMIS is not in charge of the authentication
> +        // -> no HTTP header to set
> +        return null;
> +    }
> +
> +    @Override
> +    public Element getSOAPHeaders(Object portObject) {
> +        // no SOAP headers to set
> +        return null;
> +    }
> +
> +    /**
> +     * OpenCMIS Authenticator class.
> +     */
> +    static class OpenCMISAuthenticator extends Authenticator {
> +
> +        private PasswordAuthentication passwordAuthentication = null;
> +
> +        /**
> +         * Resets the user and password. The next request will not be
> +         * authenticated.
> +         */
> +        public synchronized void reset() {
> +            passwordAuthentication = null;
> +        }
> +
> +        /**
> +         * Sets a new user and password.
> +         */
> +        public synchronized void setPasswordAuthentication(String user, String password) {
> +            passwordAuthentication = new PasswordAuthentication(user, password.toCharArray());
> +        }
> +
> +        @Override
> +        protected synchronized PasswordAuthentication getPasswordAuthentication() {
> +            return passwordAuthentication;
> +        }
> +    }
> +}
>
> Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
>
>



-- 
Florent Guillaume, Director of R&D, Nuxeo
Open Source, Java EE based, Enterprise Content Management (ECM)
http://www.nuxeo.com   http://www.nuxeo.org   +33 1 40 33 79 87

Re: svn commit: r1000365 - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings: CmisBindingFactory.java spi/NTLMAuthenticationProvider.java

Posted by Florent Guillaume <fg...@nuxeo.com>.
Shouldn't NTLMAuthenticationProvider be named
JavaNetAuthenticationProvider, or something like that? There's
actually nothing NTLM-specific about it...

Florent

On Thu, Sep 23, 2010 at 11:11 AM,  <fm...@apache.org> wrote:
> Author: fmui
> Date: Thu Sep 23 09:11:58 2010
> New Revision: 1000365
>
> URL: http://svn.apache.org/viewvc?rev=1000365&view=rev
> Log:
> added NTLM authentication provider
>
> Added:
>    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java   (with props)
> Modified:
>    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
>
> Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
> URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java?rev=1000365&r1=1000364&r2=1000365&view=diff
> ==============================================================================
> --- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java (original)
> +++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java Thu Sep 23 09:11:58 2010
> @@ -22,6 +22,7 @@ import java.util.HashMap;
>  import java.util.Map;
>
>  import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingImpl;
> +import org.apache.chemistry.opencmis.client.bindings.spi.AbstractAuthenticationProvider;
>  import org.apache.chemistry.opencmis.commons.SessionParameter;
>  import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
>
> @@ -39,7 +40,10 @@ public final class CmisBindingFactory {
>
>     /** Standard authentication provider class */
>     public static final String STANDARD_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.StandardAuthenticationProvider";
> +    /** NTLM authentication provider class */
> +    public static final String NTLM_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.NTLMAuthenticationProvider";
>
> +
>     private Map<String, String> defaults;
>
>     /**
>
> Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
> URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java?rev=1000365&view=auto
> ==============================================================================
> --- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java (added)
> +++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java Thu Sep 23 09:11:58 2010
> @@ -0,0 +1,106 @@
> +/*
> + * 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.chemistry.opencmis.client.bindings.spi;
> +
> +import java.net.Authenticator;
> +import java.net.PasswordAuthentication;
> +import java.util.List;
> +import java.util.Map;
> +
> +import org.w3c.dom.Element;
> +
> +/**
> + * NTLM authentication provider class. USE WITH CARE!
> + *
> + * This authentication provider sets a {@link java.net.Authenticator} which will
> + * replace the current authenticator, if any. It will fail if this authenticator
> + * will be replaced by another part of the code.
> + *
> + * Since {@link java.net.Authenticator} is a system-wide authenticator, it will
> + * not reliably work in multi-user environments! To achieve that you have to
> + * wrap OpenCMIS into its own class loader.
> + */
> +public class NTLMAuthenticationProvider extends AbstractAuthenticationProvider {
> +
> +    private static final long serialVersionUID = 1L;
> +
> +    // java.net.Authenticator is static, so this can be static too
> +    private final static OpenCMISAuthenticator authenticator = new OpenCMISAuthenticator();
> +    static {
> +        Authenticator.setDefault(authenticator);
> +    }
> +
> +    @Override
> +    public Map<String, List<String>> getHTTPHeaders(String url) {
> +        // get user and password
> +        String user = getUser();
> +        String password = getPassword();
> +
> +        // if no user is set, reset the authenticator
> +        if (user == null) {
> +            authenticator.reset();
> +            return null;
> +        }
> +
> +        if (password == null) {
> +            password = "";
> +        }
> +
> +        // set user and password
> +        authenticator.setPasswordAuthentication(user, password);
> +
> +        // OpenCMIS is not in charge of the authentication
> +        // -> no HTTP header to set
> +        return null;
> +    }
> +
> +    @Override
> +    public Element getSOAPHeaders(Object portObject) {
> +        // no SOAP headers to set
> +        return null;
> +    }
> +
> +    /**
> +     * OpenCMIS Authenticator class.
> +     */
> +    static class OpenCMISAuthenticator extends Authenticator {
> +
> +        private PasswordAuthentication passwordAuthentication = null;
> +
> +        /**
> +         * Resets the user and password. The next request will not be
> +         * authenticated.
> +         */
> +        public synchronized void reset() {
> +            passwordAuthentication = null;
> +        }
> +
> +        /**
> +         * Sets a new user and password.
> +         */
> +        public synchronized void setPasswordAuthentication(String user, String password) {
> +            passwordAuthentication = new PasswordAuthentication(user, password.toCharArray());
> +        }
> +
> +        @Override
> +        protected synchronized PasswordAuthentication getPasswordAuthentication() {
> +            return passwordAuthentication;
> +        }
> +    }
> +}
>
> Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/NTLMAuthenticationProvider.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
>
>



-- 
Florent Guillaume, Director of R&D, Nuxeo
Open Source, Java EE based, Enterprise Content Management (ECM)
http://www.nuxeo.com   http://www.nuxeo.org   +33 1 40 33 79 87