package com.statscollector.application.authentication; import org.apache.http.auth.AuthScope; import org.apache.http.auth.Credentials; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.log4j.Logger; import org.springframework.context.annotation.Bean; import com.statscollector.application.config.WebConfig; /** * I am an abstract class that provides common authentication methods for an * extending class * * @author JCannon * */ public abstract class AbstractAuthenticationHelper { private CredentialsProvider credsProvider; private boolean credsProviderCreated = false; private static final Logger LOGGER = Logger.getLogger(AbstractAuthenticationHelper.class); @Bean public CredentialsProvider credentialsProvider() { try { if(!credsProviderCreated || credentialsHaveChanged(credsProvider)) { WebConfig config = getConfig(); credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(config.getUsername(), config.getActualPassword())); credsProviderCreated = true; } } catch(IllegalArgumentException e) { LOGGER.error(e); } return credsProvider; } private boolean credentialsHaveChanged(final CredentialsProvider credsProvider2) { if(null == credsProvider2) { return true; } else { WebConfig config = getConfig(); Credentials credentials = credsProvider2.getCredentials(new AuthScope(config.getHost(), config .getHostPort())); if(null == credentials) { // No credentials found auth scope must have // changed. return true; } else if(null == credentials.getPassword()) { return true; } else { boolean passwordSame = credentials.getPassword().equals(config.getActualPassword()); boolean usernameSame = credentials.getUserPrincipal().getName().equals(config.getUsername()); return !passwordSame || !usernameSame; } } } protected abstract WebConfig getConfig(); }