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 61d3742..66f665d 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
@@ -58,6 +58,17 @@ public class Cas20ProxyReceivingTicketValidationFilter extends AbstractTicketVal
super.initInternal(filterConfig);
setProxyReceptorUrl(getPropertyFromInitParams(filterConfig, "proxyReceptorUrl", null));
+ final String proxyGrantingTicketStorageClass = getPropertyFromInitParams(filterConfig, "proxyGrantingTicketStorageClass", null);
+
+ if (proxyGrantingTicketStorageClass != null) {
+ try {
+ final Class storageClass = Class.forName(proxyGrantingTicketStorageClass);
+ this.proxyGrantingTicketStorage = (ProxyGrantingTicketStorage) storageClass.newInstance();
+ } catch (final Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
log.trace("Setting proxyReceptorUrl parameter: " + this.proxyReceptorUrl);
this.millisBetweenCleanUps = Integer.parseInt(getPropertyFromInitParams(filterConfig, "millisBetweenCleanUps", Integer.toString(DEFAULT_MILLIS_BETWEEN_CLEANUPS)));
}
diff --git a/cas-client-support-distributed/pom.xml b/cas-client-support-distributed/pom.xml
new file mode 100644
index 0000000..6e1b1b6
--- /dev/null
+++ b/cas-client-support-distributed/pom.xml
@@ -0,0 +1,34 @@
+
+
+
+ cas-client
+ org.jasig.cas
+ 3.1.9-SNAPSHOT
+
+ 4.0.0
+
+ org.jasig.cas
+ cas-client-support-distributed
+ jar
+
+
+
+ org.jasig.cas
+ cas-client-core
+ ${project.version}
+ jar
+ compile
+
+
+
+ net.sf.ehcache
+ ehcache
+ ${ehcache.version}
+ compile
+ jar
+
+
+
+
\ No newline at end of file
diff --git a/cas-client-support-distributed/src/main/java/org/jasig/cas/client/proxy/EhcacheBackedProxyGrantingTicketStorageImpl.java b/cas-client-support-distributed/src/main/java/org/jasig/cas/client/proxy/EhcacheBackedProxyGrantingTicketStorageImpl.java
new file mode 100644
index 0000000..67ff534
--- /dev/null
+++ b/cas-client-support-distributed/src/main/java/org/jasig/cas/client/proxy/EhcacheBackedProxyGrantingTicketStorageImpl.java
@@ -0,0 +1,45 @@
+package org.jasig.cas.client.proxy;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.Element;
+import net.sf.ehcache.CacheManager;
+
+/**
+ * @author Scott Battaglia
+ * @version $Revision$ $Date$
+ * @since 3.1.9
+ */
+public final class EhcacheBackedProxyGrantingTicketStorageImpl implements ProxyGrantingTicketStorage {
+
+ public static final String EHCACHE_CACHE_NAME = "org.jasig.cas.client.proxy.EhcacheBackedProxyGrantingTicketStorageImpl.cache";
+
+ final Cache cache;
+
+ public EhcacheBackedProxyGrantingTicketStorageImpl() {
+ this(CacheManager.create().getCache(EHCACHE_CACHE_NAME));
+
+ }
+
+ public EhcacheBackedProxyGrantingTicketStorageImpl(final Cache cache) {
+ this.cache = cache;
+ }
+
+ public void save(final String proxyGrantingTicketIou, final String proxyGrantingTicket) {
+ final Element element = new Element(proxyGrantingTicketIou, proxyGrantingTicket);
+ this.cache.put(element);
+ }
+
+ public String retrieve(final String proxyGrantingTicketIou) {
+ final Element element = this.cache.get(proxyGrantingTicketIou);
+
+ if (element == null) {
+ return null;
+ }
+
+ return (String) element.getValue();
+ }
+
+ public void cleanUp() {
+ return;
+ }
+}
diff --git a/pom.xml b/pom.xml
index b95a910..755c532 100644
--- a/pom.xml
+++ b/pom.xml
@@ -129,7 +129,12 @@
cas-client-core
cas-client-integration-atlassian
+ cas-client-support-distributed
+
+
+ 1.5.0
+