com.microsoft.exchange.impl.http.ThreadLocalCredentialsProviderFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.exchange.impl.http.ThreadLocalCredentialsProviderFactory.java

Source

/**
 * See the NOTICE file distributed with this work
 * for additional information regarding copyright ownership.
 * Board of Regents of the University of Wisconsin System
 * 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 com.microsoft.exchange.impl.http;

import java.net.URI;

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;

/**
 * {@link CredentialsProviderFactory} that returns a {@link CredentialsProvider} backed
 * by a {@link ThreadLocal}.
 * Integrators should guarantee a call to {@link #set(Credentials)} in the thread before 
 * the {@link HttpClient} execute call is initiated.
 * 
 * @author Nicholas Blair
 */
public class ThreadLocalCredentialsProviderFactory implements CredentialsProviderFactory {

    private static final ThreadLocal<Credentials> threadLocal = new ThreadLocal<Credentials>();

    /*
     * (non-Javadoc)
     * @see com.microsoft.exchange.impl.http.CredentialsProviderFactory#getCredentialsProvider(java.net.URI)
     */
    @Override
    public CredentialsProvider getCredentialsProvider(URI uri) {
        return new CredentialsProvider() {
            @Override
            public void setCredentials(AuthScope authscope, Credentials credentials) {
                throw new UnsupportedOperationException();
            }

            @Override
            public Credentials getCredentials(AuthScope authscope) {
                return ThreadLocalCredentialsProviderFactory.get();
            }

            @Override
            public void clear() {
                ThreadLocalCredentialsProviderFactory.clear();
            }
        };
    }

    /**
     * 
     * @return the current {@link Credentials} stored in the {@link ThreadLocal}.
     */
    public static Credentials get() {
        return threadLocal.get();
    }

    /**
     * Set a {@link Credentials} instance in the {@link ThreadLocal}
     * @param credentials
     */
    public static void set(Credentials credentials) {
        threadLocal.set(credentials);
    }

    /**
     * Clear the {@link ThreadLocal}.
     * @see {@link ThreadLocal#remove()}
     */
    public static void clear() {
        threadLocal.remove();
    }
}