diff --git a/cas-client-core/pom.xml b/cas-client-core/pom.xml
index 9f6f4d7..488f5ce 100644
--- a/cas-client-core/pom.xml
+++ b/cas-client-core/pom.xml
@@ -99,6 +99,28 @@
1.1b
jar
compile
-
+
+
+
+ org.springframework
+ spring-bean
+ 2.5.1
+ test
+
+
+
+ org.springframework
+ spring-core
+ 2.5.1
+ test
+
+
+
+ org.springframework
+ spring-context
+ 2.5.1
+ test
+
+
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 18ea289..5ef6787 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
@@ -1,3 +1,8 @@
+/*
+ * Copyright 2007 The JA-SIG Collaborative. All rights reserved. See license
+ * distributed with this file and available online at
+ * http://www.ja-sig.org/products/cas/overview/license/index.html
+ */
package org.jasig.cas.client.validation;
import org.jasig.cas.client.util.XmlUtils;
@@ -39,7 +44,7 @@ public final class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator
}
for (Iterator iter = this.allowedProxyChains.iterator(); iter.hasNext();) {
- if (Arrays.equals(proxiedList, (Object[]) iter.next())) {
+ if (Arrays.equals(proxiedList, (String[]) iter.next())) {
return;
}
}
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorBeanInfo.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorBeanInfo.java
index bb8b07d..9883645 100644
--- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorBeanInfo.java
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorBeanInfo.java
@@ -1,10 +1,16 @@
+/*
+ * Copyright 2007 The JA-SIG Collaborative. All rights reserved. See license
+ * distributed with this file and available online at
+ * http://www.ja-sig.org/products/cas/overview/license/index.html
+ */
package org.jasig.cas.client.validation;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.beans.PropertyEditor;
import java.beans.SimpleBeanInfo;
-import java.util.List;
+
+import org.springframework.beans.propertyeditors.CustomBooleanEditor;
/**
* BeanInfo support for using this class with Spring. Configures a ProxyListPropertyEditor to be used with the
@@ -18,13 +24,19 @@ public final class Cas20ProxyTicketValidatorBeanInfo extends SimpleBeanInfo {
public PropertyDescriptor[] getPropertyDescriptors() {
try {
- final PropertyEditor propertyEditor = new ProxyListPropertyEditor();
- final PropertyDescriptor descriptor = new PropertyDescriptor("allowedProxyChains", List.class) {
+ final PropertyDescriptor descriptor = new PropertyDescriptor("allowedProxyChains", Cas20ProxyTicketValidator.class, null, "setAllowedProxyChains") {
public PropertyEditor createPropertyEditor(final Object bean) {
- return propertyEditor;
+ return new ProxyListPropertyEditor();
}
};
- return new PropertyDescriptor[] {descriptor};
+
+ final PropertyDescriptor acceptAnyProxy = new PropertyDescriptor("acceptAnyProxy", Cas20ProxyTicketValidator.class, null, "setAcceptAnyProxy") {
+ public PropertyEditor createPropertyEditor(final Object bean) {
+ return new CustomBooleanEditor(true);
+ }
+ };
+
+ return new PropertyDescriptor[] {descriptor, acceptAnyProxy};
} catch (final IntrospectionException e) {
throw new RuntimeException(e);
}
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyListPropertyEditor.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyListPropertyEditor.java
index 05a1615..ffaa0f5 100644
--- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyListPropertyEditor.java
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyListPropertyEditor.java
@@ -1,35 +1,50 @@
+/*
+ * Copyright 2007 The JA-SIG Collaborative. All rights reserved. See license
+ * distributed with this file and available online at
+ * http://www.ja-sig.org/products/cas/overview/license/index.html
+ */
package org.jasig.cas.client.validation;
import java.beans.PropertyEditorSupport;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
+import org.jasig.cas.client.util.CommonUtils;
+
/**
* Convert a String-formatted list of acceptable proxies to an array.
- *
+ *
* @author Scott Battaglia
* @version $Revision$ $Date$
* @since 3.1
- *
+ *
*/
public final class ProxyListPropertyEditor extends PropertyEditorSupport {
- /**
- * The new list of proxies to create. Its a list of String arrays.
- */
- private final List proxyChains = new ArrayList();
+ public void setAsText(final String text) throws IllegalArgumentException {
+ final BufferedReader reader = new BufferedReader(new StringReader(text));
+ final List proxyChains = new ArrayList();
- public Object getValue() {
- return this.proxyChains;
- }
+ try {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ if (CommonUtils.isNotBlank(line)) {
+ proxyChains.add(line.trim().split(" "));
+ }
+ }
+ } catch (final IOException e) {
+ // ignore this
+ } finally {
+ try {
+ reader.close();
+ } catch (final IOException e) {
+ // nothing to do
+ }
+ }
- /** Converts the List of Strings into a list of arrays. */
- public void setValue(final Object o) {
- final List values = (List) o;
-
- for (final Iterator iter = values.iterator(); iter.hasNext();) {
- proxyChains.add(((String) iter.next()).split(" "));
- }
- }
+ setValue(proxyChains);
+ }
}
diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java
index 43398a6..aa0f057 100644
--- a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java
+++ b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java
@@ -9,6 +9,8 @@ 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.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
@@ -84,4 +86,21 @@ public final class Cas20ProxyTicketValidatorTests extends
// expected
}
}
+
+ public void testConstructionFromSpringBean() throws TicketValidationException,
+ UnsupportedEncodingException {
+ final ApplicationContext context = new ClassPathXmlApplicationContext("classpath:cas20ProxyTicketValidator.xml");
+ final Cas20ProxyTicketValidator v = (Cas20ProxyTicketValidator) context.getBean("proxyTicketValidator");
+ final Cas20ProxyTicketValidator v2 = (Cas20ProxyTicketValidator) context.getBean("proxyTicketValidatorWithAllowAnyProxy");
+
+ final String USERNAME = "username";
+ final String RESPONSE = "usernamePGTIOU-84678-8a9d...proxy1proxy2proxy3";
+ PublicTestHttpServer.instance().content = RESPONSE
+ .getBytes(PublicTestHttpServer.instance().encoding);
+
+ final Assertion assertion = v.validate("test",
+ "test");
+ assertEquals(USERNAME, assertion.getPrincipal().getName());
+
+ }
}
diff --git a/cas-client-core/src/test/resources/cas20ProxyTicketValidator.xml b/cas-client-core/src/test/resources/cas20ProxyTicketValidator.xml
new file mode 100644
index 0000000..16ec091
--- /dev/null
+++ b/cas-client-core/src/test/resources/cas20ProxyTicketValidator.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ test test2 test3 test4 test5
+ mytest mytest1 mytest2 mytest3
+ proxy1 proxy2 proxy3
+
+
+
+
+
+
+
+
\ No newline at end of file