summaryrefslogtreecommitdiffstats
path: root/src/main/java/edu/kit/scc/dei/ecplean/ECPAuthenticatorBase.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/edu/kit/scc/dei/ecplean/ECPAuthenticatorBase.java')
-rw-r--r--src/main/java/edu/kit/scc/dei/ecplean/ECPAuthenticatorBase.java45
1 files changed, 19 insertions, 26 deletions
diff --git a/src/main/java/edu/kit/scc/dei/ecplean/ECPAuthenticatorBase.java b/src/main/java/edu/kit/scc/dei/ecplean/ECPAuthenticatorBase.java
index 048f1c7..84122bb 100644
--- a/src/main/java/edu/kit/scc/dei/ecplean/ECPAuthenticatorBase.java
+++ b/src/main/java/edu/kit/scc/dei/ecplean/ECPAuthenticatorBase.java
@@ -3,7 +3,6 @@ package edu.kit.scc.dei.ecplean;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
import java.util.Observable;
import javax.xml.namespace.QName;
@@ -28,10 +27,12 @@ import org.apache.http.HttpStatus;
import org.apache.http.ParseException;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
@@ -41,15 +42,16 @@ import org.xml.sax.SAXException;
public abstract class ECPAuthenticatorBase extends Observable {
protected static Log logger = LogFactory.getLog(ECPAuthenticatorBase.class);
+
protected ECPAuthenticationInfo authInfo;
- protected DefaultHttpClient client;
+ protected CloseableHttpClient client;
protected DocumentBuilderFactory documentBuilderFactory;
protected XPathFactory xpathFactory;
protected NamespaceResolver namespaceResolver;
protected TransformerFactory transformerFactory;
- public ECPAuthenticatorBase(DefaultHttpClient client) {
- this.client = client;
+ public ECPAuthenticatorBase(CloseableHttpClient client) {
+ this.client = client == null ? HttpClients.createSystem() : client;
documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
@@ -64,41 +66,31 @@ public abstract class ECPAuthenticatorBase extends Observable {
}
public ECPAuthenticatorBase() {
- this(new DefaultHttpClient());
+ this(null);
}
protected Document authenticateIdP(Document idpRequest)
throws ECPAuthenticationException {
logger.info("Sending initial IdP Request");
- client.getCredentialsProvider().setCredentials(
- new AuthScope(authInfo.getIdpEcpEndpoint().getHost(), authInfo.getIdpEcpEndpoint().getPort()),
+ BasicCredentialsProvider bcp = new BasicCredentialsProvider();
+ bcp.setCredentials(new AuthScope(authInfo.getIdpEcpEndpoint().getHost(), authInfo.getIdpEcpEndpoint().getPort()),
new UsernamePasswordCredentials(authInfo.getUsername(), authInfo.getPassword()));
+ HttpClientContext passwordContext = HttpClientContext.create();
+ passwordContext.setCredentialsProvider(bcp);
+
HttpPost httpPost = new HttpPost(authInfo.getIdpEcpEndpoint().toString());
HttpResponse httpResponse;
try {
httpPost.setEntity(new StringEntity(documentToString(idpRequest)));
- //httpPost.setHeader("Accept", "text/xml, text/html, application/vnd.paos+xml, application/soap+xml, text/xml, */*;q=0.1");
- //httpPost.setHeader("PAOS", "ver='urn:liberty:paos:2003-08';'urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp'");
httpPost.setHeader("Content-Type", "text/xml; charset=utf-8");
- httpResponse = client.execute(httpPost);
+ httpResponse = client.execute(httpPost, passwordContext);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
throw new ECPAuthenticationException("User not authorized");
}
- } catch (UnsupportedEncodingException e) {
- logger.debug("Could not submit PAOS request to IdP");
- throw new ECPAuthenticationException(e);
- } catch (TransformerConfigurationException e) {
- logger.debug("Could not submit PAOS request to IdP");
- throw new ECPAuthenticationException(e);
- } catch (ClientProtocolException e) {
- logger.debug("Could not submit PAOS request to IdP");
- throw new ECPAuthenticationException(e);
- } catch (TransformerException e) {
- logger.debug("Could not submit PAOS request to IdP");
- throw new ECPAuthenticationException(e);
- } catch (IOException e) {
+ } catch (Exception e) {
+ httpPost.reset();
logger.debug("Could not submit PAOS request to IdP");
throw new ECPAuthenticationException(e);
}
@@ -106,6 +98,7 @@ public abstract class ECPAuthenticatorBase extends Observable {
String responseBody;
try {
responseBody = EntityUtils.toString(httpResponse.getEntity());
+ httpPost.reset();
return buildDocumentFromString(responseBody);
} catch (ParseException e) {
logger.debug("Could not read response from IdP");
@@ -153,7 +146,7 @@ public abstract class ECPAuthenticatorBase extends Observable {
return result.getWriter().toString();
}
- public DefaultHttpClient getHttpClient() {
+ public CloseableHttpClient getHttpClient() {
return client;
}