From bd999de22f4ff49521c608d66879d07218753c43 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 8 Aug 2017 13:55:14 +0200 Subject: Update apache httpclient, minor cleanups --- .../kit/scc/dei/ecplean/ECPAuthenticatorBase.java | 45 +++++++++------------- 1 file changed, 19 insertions(+), 26 deletions(-) (limited to 'src/main/java/edu/kit/scc/dei/ecplean/ECPAuthenticatorBase.java') 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; } -- cgit v1.2.3-55-g7522