/** * 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) { ThreadLocalCredentialsProviderFactory.set(credentials); } @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(); } }