From f9d0ee209bfb4d81bcc2b1c42d6b9c843cca038a Mon Sep 17 00:00:00 2001 From: Luke Taylor Date: Wed, 4 Jan 2006 21:35:10 +0000 Subject: [PATCH] Changed FilterInvocationDefinitionSourceEditor to complain if the parsed URL or the config attribute is empty or null. Plus some comment tidying. --- .../web/FilterInvocationDefinitionSourceEditor.java | 9 ++++++--- .../web/PathBasedFilterInvocationDefinitionMap.java | 9 ++++++--- ...InvocationDefinitionSourceEditorWithPathsTests.java | 10 ++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/acegisecurity/intercept/web/FilterInvocationDefinitionSourceEditor.java b/core/src/main/java/org/acegisecurity/intercept/web/FilterInvocationDefinitionSourceEditor.java index 2946f7c20f..bfebf099f3 100644 --- a/core/src/main/java/org/acegisecurity/intercept/web/FilterInvocationDefinitionSourceEditor.java +++ b/core/src/main/java/org/acegisecurity/intercept/web/FilterInvocationDefinitionSourceEditor.java @@ -41,7 +41,7 @@ import java.io.StringReader; * presented). *

* - *

+ *

* By default the class treats presented patterns as regular expressions. If * the keyword PATTERN_TYPE_APACHE_ANT is present (case * sensitive), patterns will be treated as Apache Ant paths rather than @@ -117,11 +117,14 @@ public class FilterInvocationDefinitionSourceEditor } // Tokenize the line into its name/value tokens - String[] nameValue = StringUtils.delimitedListToStringArray(line, - "="); + String[] nameValue = StringUtils.delimitedListToStringArray(line, "="); String name = nameValue[0]; String value = nameValue[1]; + if(!StringUtils.hasLength(name) || !StringUtils.hasLength(value)) { + throw new IllegalArgumentException("Failed to parse a valid name/value pair from " + line); + } + // Convert value to series of security configuration attributes ConfigAttributeEditor configAttribEd = new ConfigAttributeEditor(); configAttribEd.setAsText(value); diff --git a/core/src/main/java/org/acegisecurity/intercept/web/PathBasedFilterInvocationDefinitionMap.java b/core/src/main/java/org/acegisecurity/intercept/web/PathBasedFilterInvocationDefinitionMap.java index 07ef2ee908..2c7ce939da 100644 --- a/core/src/main/java/org/acegisecurity/intercept/web/PathBasedFilterInvocationDefinitionMap.java +++ b/core/src/main/java/org/acegisecurity/intercept/web/PathBasedFilterInvocationDefinitionMap.java @@ -31,10 +31,10 @@ import java.util.Vector; /** - * Maintains a List of ConfigAttributeDefinitions + * Maintains a List of ConfigAttributeDefinitions * associated with different HTTP request URL Apache Ant path-based patterns. * - *

+ *

* Apache Ant path expressions are used to match a HTTP request URL against a * ConfigAttributeDefinition. *

@@ -48,9 +48,12 @@ import java.util.Vector; * with the most general paths registered last. *

* - *

+ *

* If no registered paths match the HTTP URL, null is returned. *

+ * + * @author Ben Alex + * @version $Id$ */ public class PathBasedFilterInvocationDefinitionMap extends AbstractFilterInvocationDefinitionSource diff --git a/core/src/test/java/org/acegisecurity/intercept/web/FilterInvocationDefinitionSourceEditorWithPathsTests.java b/core/src/test/java/org/acegisecurity/intercept/web/FilterInvocationDefinitionSourceEditorWithPathsTests.java index 939e8bdf21..5766b86b58 100644 --- a/core/src/test/java/org/acegisecurity/intercept/web/FilterInvocationDefinitionSourceEditorWithPathsTests.java +++ b/core/src/test/java/org/acegisecurity/intercept/web/FilterInvocationDefinitionSourceEditorWithPathsTests.java @@ -223,4 +223,14 @@ public class FilterInvocationDefinitionSourceEditorWithPathsTests .getValue(); assertEquals(2, map.getMapSize()); } + + public void testInvalidNameValueFailsToParse() { + FilterInvocationDefinitionSourceEditor editor = new FilterInvocationDefinitionSourceEditor(); + try { + // Use a "==" instead of an "=" + editor.setAsText(" PATTERN_TYPE_APACHE_ANT\r\n /secure/*==ROLE_SUPERVISOR,ROLE_TELLER \r\n"); + fail("Shouldn't be able to use '==' for config attribute."); + } catch(IllegalArgumentException expected) { + } + } }