Skip to content

Commit 0457035

Browse files
allow extension points for JSON validation parsing. add filter and validator
1 parent a4f6228 commit 0457035

6 files changed

Lines changed: 68 additions & 27 deletions

File tree

cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ protected String getUrlSuffix() {
5050
return "proxyValidate";
5151
}
5252

53+
@Override
5354
protected void customParseResponse(final String response, final Assertion assertion)
5455
throws TicketValidationException {
5556
final List<String> proxies = parseProxiesFromResponse(response);

cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyReceivingTicketValidationFilter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,6 @@ public Cas30JsonProxyReceivingTicketValidationFilter() {
3232
this.defaultServiceTicketValidatorClass = Cas30JsonServiceTicketValidator.class;
3333
this.defaultProxyTicketValidatorClass = Cas30JsonProxyTicketValidator.class;
3434
}
35+
36+
3537
}
Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,42 @@
11
package org.jasig.cas.client.validation.json;
22

33
import org.jasig.cas.client.validation.Assertion;
4+
import org.jasig.cas.client.validation.Cas30ProxyTicketValidator;
45
import org.jasig.cas.client.validation.TicketValidationException;
56

7+
import java.util.List;
8+
69
/**
710
* This is {@link Cas30JsonProxyTicketValidator} that attempts to parse the CAS validation response
811
* as JSON. Very similar to {@link Cas30JsonServiceTicketValidator}, it also honors proxies as the name suggests.
912
*
1013
* @author Misagh Moayyed
1114
*/
12-
public class Cas30JsonProxyTicketValidator extends Cas30JsonServiceTicketValidator {
15+
public class Cas30JsonProxyTicketValidator extends Cas30ProxyTicketValidator {
1316
public Cas30JsonProxyTicketValidator(final String casServerUrlPrefix) {
1417
super(casServerUrlPrefix);
1518
getCustomParameters().put("format", "JSON");
1619
}
1720

1821
@Override
1922
protected Assertion parseResponseFromServer(final String response) throws TicketValidationException {
20-
return super.parseResponseFromServer(response);
23+
try {
24+
final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response);
25+
return json.getAssertion(getProxyGrantingTicketStorage(), getProxyRetriever());
26+
} catch (final Exception e) {
27+
logger.warn("Unable parse the JSON response");
28+
return super.parseResponseFromServer(response);
29+
}
30+
}
31+
32+
@Override
33+
protected List<String> parseProxiesFromResponse(final String response) {
34+
try {
35+
final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response);
36+
return json.getAuthenticationSuccess().getProxies();
37+
} catch (final Exception e) {
38+
logger.warn("Unable to locate proxies from the JSON response");
39+
return super.parseProxiesFromResponse(response);
40+
}
2141
}
2242
}
Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package org.jasig.cas.client.validation.json;
22

3-
import org.jasig.cas.client.authentication.AttributePrincipal;
4-
import org.jasig.cas.client.authentication.AttributePrincipalImpl;
5-
import org.jasig.cas.client.util.CommonUtils;
63
import org.jasig.cas.client.validation.Assertion;
7-
import org.jasig.cas.client.validation.AssertionImpl;
84
import org.jasig.cas.client.validation.Cas30ServiceTicketValidator;
95
import org.jasig.cas.client.validation.TicketValidationException;
106

7+
import java.util.Collections;
118
import java.util.Map;
129

1310
/**
@@ -27,25 +24,17 @@ public Cas30JsonServiceTicketValidator(final String casServerUrlPrefix) {
2724

2825
@Override
2926
protected Assertion parseResponseFromServer(final String response) throws TicketValidationException {
30-
final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response);
31-
final String proxyGrantingTicketIou = json.getAuthenticationSuccess().getProxyGrantingTicket();
32-
final String proxyGrantingTicket;
33-
if (CommonUtils.isBlank(proxyGrantingTicketIou) || getProxyGrantingTicketStorage() == null) {
34-
proxyGrantingTicket = null;
35-
} else {
36-
proxyGrantingTicket = getProxyGrantingTicketStorage().retrieve(proxyGrantingTicketIou);
27+
try {
28+
final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response);
29+
return json.getAssertion(getProxyGrantingTicketStorage(), getProxyRetriever());
30+
} catch (final Exception e) {
31+
logger.warn("Unable parse the JSON response");
32+
return super.parseResponseFromServer(response);
3733
}
34+
}
3835

39-
final Assertion assertion;
40-
final Map<String, Object> attributes = json.getAuthenticationSuccess().getAttributes();
41-
final String principal = json.getAuthenticationSuccess().getUser();
42-
if (CommonUtils.isNotBlank(proxyGrantingTicket)) {
43-
final AttributePrincipal attributePrincipal = new AttributePrincipalImpl(principal, attributes,
44-
proxyGrantingTicket, getProxyRetriever());
45-
assertion = new AssertionImpl(attributePrincipal);
46-
} else {
47-
assertion = new AssertionImpl(new AttributePrincipalImpl(principal, attributes));
48-
}
49-
return assertion;
36+
@Override
37+
protected Map<String, Object> extractCustomAttributes(final String xml) {
38+
return Collections.emptyMap();
5039
}
5140
}

cas-client-core/src/main/java/org/jasig/cas/client/validation/json/JsonValidationResponseParser.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44
import org.jasig.cas.client.util.CommonUtils;
55
import org.jasig.cas.client.validation.TicketValidationException;
66

7-
import java.util.List;
8-
import java.util.Map;
9-
107
/**
118
* This is {@link JsonValidationResponseParser}.
129
*

cas-client-core/src/main/java/org/jasig/cas/client/validation/json/TicketValidationJsonResponse.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
package org.jasig.cas.client.validation.json;
22

3+
import org.jasig.cas.client.authentication.AttributePrincipal;
4+
import org.jasig.cas.client.authentication.AttributePrincipalImpl;
5+
import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage;
6+
import org.jasig.cas.client.proxy.ProxyRetriever;
7+
import org.jasig.cas.client.util.CommonUtils;
8+
import org.jasig.cas.client.validation.Assertion;
9+
import org.jasig.cas.client.validation.AssertionImpl;
10+
311
import java.util.List;
412
import java.util.Map;
513

@@ -28,6 +36,30 @@ public void setAuthenticationSuccess(final CasServiceResponseAuthenticationSucce
2836
this.authenticationSuccess = authenticationSuccess;
2937
}
3038

39+
Assertion getAssertion(final ProxyGrantingTicketStorage proxyGrantingTicketStorage,
40+
final ProxyRetriever proxyRetriever) {
41+
final String proxyGrantingTicketIou = getAuthenticationSuccess().getProxyGrantingTicket();
42+
final String proxyGrantingTicket;
43+
if (CommonUtils.isBlank(proxyGrantingTicketIou) || proxyGrantingTicketStorage == null) {
44+
proxyGrantingTicket = null;
45+
} else {
46+
proxyGrantingTicket = proxyGrantingTicketStorage.retrieve(proxyGrantingTicketIou);
47+
}
48+
49+
final Assertion assertion;
50+
final Map<String, Object> attributes = getAuthenticationSuccess().getAttributes();
51+
final String principal = getAuthenticationSuccess().getUser();
52+
if (CommonUtils.isNotBlank(proxyGrantingTicket)) {
53+
final AttributePrincipal attributePrincipal = new AttributePrincipalImpl(principal, attributes,
54+
proxyGrantingTicket, proxyRetriever);
55+
assertion = new AssertionImpl(attributePrincipal);
56+
} else {
57+
assertion = new AssertionImpl(new AttributePrincipalImpl(principal, attributes));
58+
}
59+
return assertion;
60+
}
61+
62+
3163
static class CasServiceResponseAuthenticationSuccess {
3264
private String user;
3365
private String proxyGrantingTicket;

0 commit comments

Comments
 (0)