CASC-180: Removed the default url connection factory, allowed proxy retrieval to use the configured factory instance.
This commit is contained in:
parent
c970d5b68d
commit
c50b143c3f
|
|
@ -30,7 +30,6 @@ import java.util.Map;
|
|||
* Concrete implementation of the AttributePrincipal interface.
|
||||
*
|
||||
* @author Scott Battaglia
|
||||
* @version $Revision$ $Date$
|
||||
* @since 3.1
|
||||
*/
|
||||
public class AttributePrincipalImpl extends SimplePrincipal implements AttributePrincipal {
|
||||
|
|
@ -80,7 +79,7 @@ public class AttributePrincipalImpl extends SimplePrincipal implements Attribute
|
|||
}
|
||||
|
||||
/**
|
||||
* Constructs a new principal witht he supplied name, attributes, and proxying capabilities.
|
||||
* Constructs a new principal with the supplied name, attributes, and proxying capabilities.
|
||||
*
|
||||
* @param name the unique identifier for the principal.
|
||||
* @param attributes the key/value pairs for this principal.
|
||||
|
|
|
|||
|
|
@ -18,12 +18,15 @@
|
|||
*/
|
||||
package org.jasig.cas.client.proxy;
|
||||
|
||||
import org.jasig.cas.client.ssl.URLConnectionFactory;
|
||||
import org.jasig.cas.client.util.CommonUtils;
|
||||
import org.jasig.cas.client.util.XmlUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
/**
|
||||
|
|
@ -43,7 +46,7 @@ public final class Cas20ProxyRetriever implements ProxyRetriever {
|
|||
/** Unique Id for serialization. */
|
||||
private static final long serialVersionUID = 560409469568911791L;
|
||||
|
||||
/**
|
||||
/**
|
||||
* Instance of Commons Logging.
|
||||
*/
|
||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
|
|
@ -55,31 +58,39 @@ public final class Cas20ProxyRetriever implements ProxyRetriever {
|
|||
|
||||
private final String encoding;
|
||||
|
||||
/** Url connection factory to use when communicating with the server **/
|
||||
private final URLConnectionFactory urlConnectionFactory;
|
||||
|
||||
/**
|
||||
* Main Constructor.
|
||||
*
|
||||
* @param casServerUrl the URL to the CAS server (i.e. http://localhost/cas/)
|
||||
* @param encoding the encoding to use.
|
||||
* @param urlFactory url connection factory use when retrieving proxy responses from the server
|
||||
*/
|
||||
public Cas20ProxyRetriever(final String casServerUrl, final String encoding) {
|
||||
public Cas20ProxyRetriever(final String casServerUrl, final String encoding, final URLConnectionFactory urlFactory) {
|
||||
CommonUtils.assertNotNull(casServerUrl, "casServerUrl cannot be null.");
|
||||
this.casServerUrl = casServerUrl;
|
||||
this.encoding = encoding;
|
||||
this.urlConnectionFactory = urlFactory;
|
||||
}
|
||||
|
||||
|
||||
public String getProxyTicketIdFor(final String proxyGrantingTicketId,
|
||||
final String targetService) {
|
||||
|
||||
final String url = constructUrl(proxyGrantingTicketId, targetService);
|
||||
final String response = CommonUtils.getResponseFromServer(url, this.encoding);
|
||||
final String error = XmlUtils.getTextForElement(response, "proxyFailure");
|
||||
|
||||
if (CommonUtils.isNotEmpty(error)) {
|
||||
logger.debug(error);
|
||||
return null;
|
||||
try {
|
||||
final String url = constructUrl(proxyGrantingTicketId, targetService);
|
||||
final String response = CommonUtils.getResponseFromServer(new URL(url), this.urlConnectionFactory, this.encoding);
|
||||
final String error = XmlUtils.getTextForElement(response, "proxyFailure");
|
||||
|
||||
if (CommonUtils.isNotEmpty(error)) {
|
||||
logger.debug(error);
|
||||
return null;
|
||||
}
|
||||
|
||||
return XmlUtils.getTextForElement(response, "proxyTicket");
|
||||
} catch (final MalformedURLException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
|
||||
return XmlUtils.getTextForElement(response, "proxyTicket");
|
||||
}
|
||||
|
||||
private String constructUrl(final String proxyGrantingTicketId, final String targetService) {
|
||||
|
|
|
|||
|
|
@ -31,8 +31,6 @@ public final class HttpsURLConnectionFactory implements URLConnectionFactory {
|
|||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(HttpsURLConnectionFactory.class);
|
||||
|
||||
public static final HttpsURLConnectionFactory INSTANCE = new HttpsURLConnectionFactory();
|
||||
|
||||
/**
|
||||
* Hostname verifier used when making an SSL request to the CAS server.
|
||||
* Defaults to {@link HttpsURLConnection#getDefaultHostnameVerifier()}
|
||||
|
|
@ -89,7 +87,7 @@ public final class HttpsURLConnectionFactory implements URLConnectionFactory {
|
|||
httpsConnection.setHostnameVerifier(this.hostnameVerifier);
|
||||
}
|
||||
}
|
||||
return (HttpURLConnection)conn;
|
||||
return (HttpURLConnection) conn;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -359,22 +359,6 @@ public final class CommonUtils {
|
|||
conn.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Contacts the remote URL and returns the response.
|
||||
*
|
||||
* @param url the url to contact.
|
||||
* @param encoding the encoding to use.
|
||||
* @return the response.
|
||||
*/
|
||||
public static String getResponseFromServer(final String url, String encoding) {
|
||||
try {
|
||||
return getResponseFromServer(new URL(url), HttpsURLConnectionFactory.INSTANCE, encoding);
|
||||
} catch (final MalformedURLException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static ProxyList createProxyList(final String proxies) {
|
||||
|
|
|
|||
|
|
@ -145,7 +145,11 @@ public class Cas20ProxyReceivingTicketValidationFilter extends AbstractTicketVal
|
|||
}
|
||||
validator.setProxyCallbackUrl(getPropertyFromInitParams(filterConfig, "proxyCallbackUrl", null));
|
||||
validator.setProxyGrantingTicketStorage(this.proxyGrantingTicketStorage);
|
||||
validator.setProxyRetriever(new Cas20ProxyRetriever(casServerUrlPrefix, getPropertyFromInitParams(filterConfig, "encoding", null)));
|
||||
|
||||
final URLConnectionFactory factory = new HttpsURLConnectionFactory(getHostnameVerifier(filterConfig), getSSLConfig(filterConfig));
|
||||
validator.setURLConnectionFactory(factory);
|
||||
|
||||
validator.setProxyRetriever(new Cas20ProxyRetriever(casServerUrlPrefix, getPropertyFromInitParams(filterConfig, "encoding", null), factory));
|
||||
validator.setRenew(parseBoolean(getPropertyFromInitParams(filterConfig, "renew", "false")));
|
||||
validator.setEncoding(getPropertyFromInitParams(filterConfig, "encoding", null));
|
||||
|
||||
|
|
@ -161,9 +165,6 @@ public class Cas20ProxyReceivingTicketValidationFilter extends AbstractTicketVal
|
|||
}
|
||||
|
||||
validator.setCustomParameters(additionalParameters);
|
||||
final URLConnectionFactory factory = new HttpsURLConnectionFactory(getHostnameVerifier(filterConfig), getSSLConfig(filterConfig));
|
||||
validator.setURLConnectionFactory(factory);
|
||||
|
||||
return validator;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage;
|
|||
import org.jasig.cas.client.proxy.ProxyRetriever;
|
||||
import org.jasig.cas.client.util.CommonUtils;
|
||||
import org.jasig.cas.client.util.XmlUtils;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
|
@ -41,7 +40,6 @@ import java.util.*;
|
|||
* Implementation of the TicketValidator that will validate Service Tickets in compliance with the CAS 2.
|
||||
*
|
||||
* @author Scott Battaglia
|
||||
* @version $Revision$ $Date$
|
||||
* @since 3.1
|
||||
*/
|
||||
public class Cas20ServiceTicketValidator extends AbstractCasProtocolUrlBasedTicketValidator {
|
||||
|
|
@ -60,10 +58,11 @@ public class Cas20ServiceTicketValidator extends AbstractCasProtocolUrlBasedTick
|
|||
* CAS server url prefix.
|
||||
*
|
||||
* @param casServerUrlPrefix the CAS Server URL prefix.
|
||||
* @param urlFactory URL connection factory to use when communicating with the server
|
||||
*/
|
||||
public Cas20ServiceTicketValidator(final String casServerUrlPrefix) {
|
||||
super(casServerUrlPrefix);
|
||||
this.proxyRetriever = new Cas20ProxyRetriever(casServerUrlPrefix, getEncoding());
|
||||
this.proxyRetriever = new Cas20ProxyRetriever(casServerUrlPrefix, getEncoding(), getURLConnectionFactory());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ import org.jasig.cas.client.PublicTestHttpServer;
|
|||
import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage;
|
||||
import org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl;
|
||||
import org.jasig.cas.client.proxy.ProxyRetriever;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
|
|
|
|||
Loading…
Reference in New Issue