diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java index 289c402..7bdf0d7 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java @@ -50,6 +50,7 @@ public class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator { return "proxyValidate"; } + @Override protected void customParseResponse(final String response, final Assertion assertion) throws TicketValidationException { final List proxies = parseProxiesFromResponse(response); diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyReceivingTicketValidationFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyReceivingTicketValidationFilter.java index 76c9d7e..4fdb0e1 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyReceivingTicketValidationFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyReceivingTicketValidationFilter.java @@ -32,4 +32,6 @@ public class Cas30JsonProxyReceivingTicketValidationFilter extends Cas30ProxyRec this.defaultServiceTicketValidatorClass = Cas30JsonServiceTicketValidator.class; this.defaultProxyTicketValidatorClass = Cas30JsonProxyTicketValidator.class; } + + } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyTicketValidator.java index 43dcc89..48ff1f3 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyTicketValidator.java @@ -1,15 +1,18 @@ package org.jasig.cas.client.validation.json; import org.jasig.cas.client.validation.Assertion; +import org.jasig.cas.client.validation.Cas30ProxyTicketValidator; import org.jasig.cas.client.validation.TicketValidationException; +import java.util.List; + /** * This is {@link Cas30JsonProxyTicketValidator} that attempts to parse the CAS validation response * as JSON. Very similar to {@link Cas30JsonServiceTicketValidator}, it also honors proxies as the name suggests. * * @author Misagh Moayyed */ -public class Cas30JsonProxyTicketValidator extends Cas30JsonServiceTicketValidator { +public class Cas30JsonProxyTicketValidator extends Cas30ProxyTicketValidator { public Cas30JsonProxyTicketValidator(final String casServerUrlPrefix) { super(casServerUrlPrefix); getCustomParameters().put("format", "JSON"); @@ -17,6 +20,23 @@ public class Cas30JsonProxyTicketValidator extends Cas30JsonServiceTicketValidat @Override protected Assertion parseResponseFromServer(final String response) throws TicketValidationException { - return super.parseResponseFromServer(response); + try { + final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response); + return json.getAssertion(getProxyGrantingTicketStorage(), getProxyRetriever()); + } catch (final Exception e) { + logger.warn("Unable parse the JSON response"); + return super.parseResponseFromServer(response); + } + } + + @Override + protected List parseProxiesFromResponse(final String response) { + try { + final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response); + return json.getAuthenticationSuccess().getProxies(); + } catch (final Exception e) { + logger.warn("Unable to locate proxies from the JSON response"); + return super.parseProxiesFromResponse(response); + } } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonServiceTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonServiceTicketValidator.java index 4476296..f53a0be 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonServiceTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonServiceTicketValidator.java @@ -1,13 +1,10 @@ package org.jasig.cas.client.validation.json; -import org.jasig.cas.client.authentication.AttributePrincipal; -import org.jasig.cas.client.authentication.AttributePrincipalImpl; -import org.jasig.cas.client.util.CommonUtils; import org.jasig.cas.client.validation.Assertion; -import org.jasig.cas.client.validation.AssertionImpl; import org.jasig.cas.client.validation.Cas30ServiceTicketValidator; import org.jasig.cas.client.validation.TicketValidationException; +import java.util.Collections; import java.util.Map; /** @@ -27,25 +24,17 @@ public class Cas30JsonServiceTicketValidator extends Cas30ServiceTicketValidator @Override protected Assertion parseResponseFromServer(final String response) throws TicketValidationException { - final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response); - final String proxyGrantingTicketIou = json.getAuthenticationSuccess().getProxyGrantingTicket(); - final String proxyGrantingTicket; - if (CommonUtils.isBlank(proxyGrantingTicketIou) || getProxyGrantingTicketStorage() == null) { - proxyGrantingTicket = null; - } else { - proxyGrantingTicket = getProxyGrantingTicketStorage().retrieve(proxyGrantingTicketIou); + try { + final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response); + return json.getAssertion(getProxyGrantingTicketStorage(), getProxyRetriever()); + } catch (final Exception e) { + logger.warn("Unable parse the JSON response"); + return super.parseResponseFromServer(response); } + } - final Assertion assertion; - final Map attributes = json.getAuthenticationSuccess().getAttributes(); - final String principal = json.getAuthenticationSuccess().getUser(); - if (CommonUtils.isNotBlank(proxyGrantingTicket)) { - final AttributePrincipal attributePrincipal = new AttributePrincipalImpl(principal, attributes, - proxyGrantingTicket, getProxyRetriever()); - assertion = new AssertionImpl(attributePrincipal); - } else { - assertion = new AssertionImpl(new AttributePrincipalImpl(principal, attributes)); - } - return assertion; + @Override + protected Map extractCustomAttributes(final String xml) { + return Collections.emptyMap(); } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/JsonValidationResponseParser.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/JsonValidationResponseParser.java index 2cf1f05..8d37d15 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/JsonValidationResponseParser.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/JsonValidationResponseParser.java @@ -4,9 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.jasig.cas.client.util.CommonUtils; import org.jasig.cas.client.validation.TicketValidationException; -import java.util.List; -import java.util.Map; - /** * This is {@link JsonValidationResponseParser}. * diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/TicketValidationJsonResponse.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/TicketValidationJsonResponse.java index 75e83af..e806470 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/TicketValidationJsonResponse.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/TicketValidationJsonResponse.java @@ -1,5 +1,13 @@ package org.jasig.cas.client.validation.json; +import org.jasig.cas.client.authentication.AttributePrincipal; +import org.jasig.cas.client.authentication.AttributePrincipalImpl; +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.validation.Assertion; +import org.jasig.cas.client.validation.AssertionImpl; + import java.util.List; import java.util.Map; @@ -28,6 +36,30 @@ final class TicketValidationJsonResponse { this.authenticationSuccess = authenticationSuccess; } + Assertion getAssertion(final ProxyGrantingTicketStorage proxyGrantingTicketStorage, + final ProxyRetriever proxyRetriever) { + final String proxyGrantingTicketIou = getAuthenticationSuccess().getProxyGrantingTicket(); + final String proxyGrantingTicket; + if (CommonUtils.isBlank(proxyGrantingTicketIou) || proxyGrantingTicketStorage == null) { + proxyGrantingTicket = null; + } else { + proxyGrantingTicket = proxyGrantingTicketStorage.retrieve(proxyGrantingTicketIou); + } + + final Assertion assertion; + final Map attributes = getAuthenticationSuccess().getAttributes(); + final String principal = getAuthenticationSuccess().getUser(); + if (CommonUtils.isNotBlank(proxyGrantingTicket)) { + final AttributePrincipal attributePrincipal = new AttributePrincipalImpl(principal, attributes, + proxyGrantingTicket, proxyRetriever); + assertion = new AssertionImpl(attributePrincipal); + } else { + assertion = new AssertionImpl(new AttributePrincipalImpl(principal, attributes)); + } + return assertion; + } + + static class CasServiceResponseAuthenticationSuccess { private String user; private String proxyGrantingTicket;