diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/Cas20ProxyRetriever.java b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/Cas20ProxyRetriever.java index 59e3fec..7babd0e 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/Cas20ProxyRetriever.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/Cas20ProxyRetriever.java @@ -45,22 +45,24 @@ public final class Cas20ProxyRetriever implements ProxyRetriever { */ private final String casServerUrl; + private final String encoding; + /** * Main Constructor. * * @param casServerUrl the URL to the CAS server (i.e. http://localhost/cas/) */ - public Cas20ProxyRetriever(final String casServerUrl) { - CommonUtils.assertNotNull(casServerUrl, - "casServerUrl cannot be null."); + public Cas20ProxyRetriever(final String casServerUrl, final String encoding) { + CommonUtils.assertNotNull(casServerUrl, "casServerUrl cannot be null."); this.casServerUrl = casServerUrl; + this.encoding = encoding; } public String getProxyTicketIdFor(final String proxyGrantingTicketId, final String targetService) { final String url = constructUrl(proxyGrantingTicketId, targetService); - final String response = CommonUtils.getResponseFromServer(url); + final String response = CommonUtils.getResponseFromServer(url, this.encoding); final String error = XmlUtils.getTextForElement(response, "proxyFailure"); if (CommonUtils.isNotEmpty(error)) { diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java b/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java index 7c1728b..bc6068e 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java @@ -285,8 +285,8 @@ public final class CommonUtils { * @param constructedUrl the url to contact. * @return the response. */ - public static String getResponseFromServer(final URL constructedUrl) { - return getResponseFromServer(constructedUrl, HttpsURLConnection.getDefaultHostnameVerifier()); + public static String getResponseFromServer(final URL constructedUrl, final String encoding) { + return getResponseFromServer(constructedUrl, HttpsURLConnection.getDefaultHostnameVerifier(), encoding); } /** @@ -296,14 +296,20 @@ public final class CommonUtils { * @param hostnameVerifier Host name verifier to use for HTTPS connections. * @return the response. */ - public static String getResponseFromServer(final URL constructedUrl, final HostnameVerifier hostnameVerifier) { + public static String getResponseFromServer(final URL constructedUrl, final HostnameVerifier hostnameVerifier, final String encoding) { URLConnection conn = null; try { conn = constructedUrl.openConnection(); if (conn instanceof HttpsURLConnection) { ((HttpsURLConnection)conn).setHostnameVerifier(hostnameVerifier); } - final BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + final BufferedReader in; + + if (CommonUtils.isEmpty(encoding)) { + in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + } else { + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), encoding)); + } String line; final StringBuffer stringBuffer = new StringBuffer(255); @@ -331,9 +337,9 @@ public final class CommonUtils { * @param url the url to contact. * @return the response. */ - public static String getResponseFromServer(final String url) { + public static String getResponseFromServer(final String url, String encoding) { try { - return getResponseFromServer(new URL(url)); + return getResponseFromServer(new URL(url), encoding); } catch (final MalformedURLException e) { throw new IllegalArgumentException(e); } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractCasProtocolUrlBasedTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractCasProtocolUrlBasedTicketValidator.java index fd732e8..40dd9e5 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractCasProtocolUrlBasedTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractCasProtocolUrlBasedTicketValidator.java @@ -27,9 +27,9 @@ public abstract class AbstractCasProtocolUrlBasedTicketValidator extends Abstrac */ protected final String retrieveResponseFromServer(final URL validationUrl, final String ticket) { if (this.hostnameVerifier != null) { - return CommonUtils.getResponseFromServer(validationUrl, this.hostnameVerifier); + return CommonUtils.getResponseFromServer(validationUrl, this.hostnameVerifier, getEncoding()); } else { - return CommonUtils.getResponseFromServer(validationUrl); + return CommonUtils.getResponseFromServer(validationUrl, getEncoding()); } } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractUrlBasedTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractUrlBasedTicketValidator.java index d1fde56..06a19d9 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractUrlBasedTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractUrlBasedTicketValidator.java @@ -55,6 +55,8 @@ public abstract class AbstractUrlBasedTicketValidator implements TicketValidator */ private Map customParameters; + private String encoding; + /** * Constructs a new TicketValidator with the casServerUrlPrefix. * @@ -198,15 +200,23 @@ public abstract class AbstractUrlBasedTicketValidator implements TicketValidator } } - public void setRenew(final boolean renew) { + public final void setRenew(final boolean renew) { this.renew = renew; } - public void setCustomParameters(final Map customParameters) { + public final void setCustomParameters(final Map customParameters) { this.customParameters = customParameters; } - public void setHostnameVerifier(final HostnameVerifier verifier) { + public final void setHostnameVerifier(final HostnameVerifier verifier) { this.hostnameVerifier = verifier; } + + public final void setEncoding(final String encoding) { + this.encoding = encoding; + } + + protected final String getEncoding() { + return this.encoding; + } } \ No newline at end of file diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas10TicketValidationFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas10TicketValidationFilter.java index 6475706..7247e07 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas10TicketValidationFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas10TicketValidationFilter.java @@ -23,6 +23,7 @@ public class Cas10TicketValidationFilter extends AbstractTicketValidationFilter final Cas10TicketValidator validator = new Cas10TicketValidator(casServerUrlPrefix); validator.setRenew(parseBoolean(getPropertyFromInitParams(filterConfig, "renew", "false"))); validator.setHostnameVerifier(getHostnameVerifier(filterConfig)); + validator.setEncoding(getPropertyFromInitParams(filterConfig, "encoding", null)); return validator; } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilter.java index 9a8e118..921dbd7 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyReceivingTicketValidationFilter.java @@ -109,8 +109,9 @@ public class Cas20ProxyReceivingTicketValidationFilter extends AbstractTicketVal } validator.setProxyCallbackUrl(getPropertyFromInitParams(filterConfig, "proxyCallbackUrl", null)); validator.setProxyGrantingTicketStorage(this.proxyGrantingTicketStorage); - validator.setProxyRetriever(new Cas20ProxyRetriever(casServerUrlPrefix)); + validator.setProxyRetriever(new Cas20ProxyRetriever(casServerUrlPrefix, getPropertyFromInitParams(filterConfig, "encoding", null))); validator.setRenew(parseBoolean(getPropertyFromInitParams(filterConfig, "renew", "false"))); + validator.setEncoding(getPropertyFromInitParams(filterConfig, "encoding", null)); final Map additionalParameters = new HashMap(); final List params = Arrays.asList(RESERVED_INIT_PARAMS); diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java index bfdc23e..0b2a80c 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java @@ -49,7 +49,7 @@ public class Cas20ServiceTicketValidator extends AbstractCasProtocolUrlBasedTick */ public Cas20ServiceTicketValidator(final String casServerUrlPrefix) { super(casServerUrlPrefix); - this.proxyRetriever = new Cas20ProxyRetriever(casServerUrlPrefix); + this.proxyRetriever = new Cas20ProxyRetriever(casServerUrlPrefix, getEncoding()); } /** diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidationFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidationFilter.java index 4dc4c6f..4572e00 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidationFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidationFilter.java @@ -30,6 +30,7 @@ public class Saml11TicketValidationFilter extends AbstractTicketValidationFilter validator.setTolerance(Long.parseLong(tolerance)); validator.setRenew(parseBoolean(getPropertyFromInitParams(filterConfig, "renew", "false"))); validator.setHostnameVerifier(getHostnameVerifier(filterConfig)); + validator.setEncoding(getPropertyFromInitParams(filterConfig, "encoding", null)); return validator; } }