diff --git a/org.springframework.integration.security/src/main/java/org/springframework/integration/security/config/IncludeExcludePattern.java b/org.springframework.integration.security/src/main/java/org/springframework/integration/security/config/IncludeExcludePattern.java new file mode 100644 index 0000000000..f0c6c37bea --- /dev/null +++ b/org.springframework.integration.security/src/main/java/org/springframework/integration/security/config/IncludeExcludePattern.java @@ -0,0 +1,31 @@ +package org.springframework.integration.security.config; + +/** + * + * @author Jonas Partner + * + */ +public class IncludeExcludePattern { + + private final boolean isIncludePattern; + + private final String pattern; + + public IncludeExcludePattern(boolean isIncludePattern, String pattern) { + this.isIncludePattern = isIncludePattern; + this.pattern = pattern; + } + + public IncludeExcludePattern(String pattern) { + this(true,pattern); + } + + public boolean isIncludePattern() { + return isIncludePattern; + } + + public String getPattern() { + return pattern; + } + +} diff --git a/org.springframework.integration.security/src/main/java/org/springframework/integration/security/config/JdkRegExpOrderedIncludeExcludeList.java b/org.springframework.integration.security/src/main/java/org/springframework/integration/security/config/JdkRegExpOrderedIncludeExcludeList.java new file mode 100644 index 0000000000..d970b202f6 --- /dev/null +++ b/org.springframework.integration.security/src/main/java/org/springframework/integration/security/config/JdkRegExpOrderedIncludeExcludeList.java @@ -0,0 +1,56 @@ +package org.springframework.integration.security.config; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.regex.Pattern; + +public class JdkRegExpOrderedIncludeExcludeList implements OrderedIncludeExcludeList { + + private final boolean includeByDefault; + + private final List patternHolders; + + public JdkRegExpOrderedIncludeExcludeList(List patterns){ + this(true, patterns); + } + + public JdkRegExpOrderedIncludeExcludeList(boolean includeByDefault, List patterns) { + super(); + this.includeByDefault = includeByDefault; + List patternHolders = new ArrayList(); + for(int i = 0 ; i patterns = createIncludeExcludeList(new boolean[] { true }, new String[] { ".*" }); + JdkRegExpOrderedIncludeExcludeList matcher = new JdkRegExpOrderedIncludeExcludeList(false, patterns); + assertTrue("Did not match expected name", matcher.isIncluded("anyoldthing")); + + } + + @Test + public void testNoPatternsIncludeByDefaultTrue() { + List patterns = createIncludeExcludeList(new boolean[] {}, new String[] {}); + JdkRegExpOrderedIncludeExcludeList matcher = new JdkRegExpOrderedIncludeExcludeList(true, patterns); + assertTrue("Did not match expected name", matcher.isIncluded("anyoldthing")); + } + + @Test + public void testNoPatternsIncludeByDefaultFalse() { + List patterns = createIncludeExcludeList(new boolean[] {}, new String[] {}); + JdkRegExpOrderedIncludeExcludeList matcher = new JdkRegExpOrderedIncludeExcludeList(false, patterns); + assertFalse("Unexpected match when match by default false and no patterns", matcher.isIncluded("anyoldthing")); + } + + + @Test + public void testExcludeThenIncludeWithIncludeByDefaultFalse() { + List patterns = createIncludeExcludeList(new boolean[] {false, true}, new String[] {"admin.*",".*"}); + JdkRegExpOrderedIncludeExcludeList matcher = new JdkRegExpOrderedIncludeExcludeList(false, patterns); + assertFalse("Unexpected match when match by default false and should have been excluded", matcher.isIncluded("adminChannel")); + } + + + List createIncludeExcludeList(boolean[] includeExclude, String[] patterns) { + assertEquals("flag and patterns arrays must be same length", includeExclude.length, patterns.length); + + List includeExcludePatterns = new ArrayList(patterns.length); + for (int i = 0; i < includeExclude.length; i++) { + includeExcludePatterns.add(new IncludeExcludePattern(includeExclude[i], patterns[i])); + } + return includeExcludePatterns; + } + +} diff --git a/org.springframework.integration.security/src/test/java/org/springframework/integration/security/TargetSecuringAdvisorTests.java b/org.springframework.integration.security/src/test/java/org/springframework/integration/security/target/TargetSecuringAdvisorTests.java similarity index 96% rename from org.springframework.integration.security/src/test/java/org/springframework/integration/security/TargetSecuringAdvisorTests.java rename to org.springframework.integration.security/src/test/java/org/springframework/integration/security/target/TargetSecuringAdvisorTests.java index c519ccb142..f171dce4c5 100644 --- a/org.springframework.integration.security/src/test/java/org/springframework/integration/security/TargetSecuringAdvisorTests.java +++ b/org.springframework.integration.security/src/test/java/org/springframework/integration/security/target/TargetSecuringAdvisorTests.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.integration.security; +package org.springframework.integration.security.target; import org.junit.Test; import org.springframework.aop.framework.ProxyFactory; @@ -21,6 +21,7 @@ import org.springframework.integration.message.BlockingTarget; import org.springframework.integration.message.Message; import org.springframework.integration.message.StringMessage; import org.springframework.integration.message.Target; +import org.springframework.integration.security.target.TargetSecuringAdvisor; import org.springframework.security.AccessDecisionManager; import org.springframework.security.AccessDeniedException; import org.springframework.security.Authentication; diff --git a/org.springframework.integration.security/src/test/java/org/springframework/integration/security/TargetSecuringInterceptorTests.java b/org.springframework.integration.security/src/test/java/org/springframework/integration/security/target/TargetSecuringInterceptorTests.java similarity index 96% rename from org.springframework.integration.security/src/test/java/org/springframework/integration/security/TargetSecuringInterceptorTests.java rename to org.springframework.integration.security/src/test/java/org/springframework/integration/security/target/TargetSecuringInterceptorTests.java index 5dd1af799f..3112986173 100644 --- a/org.springframework.integration.security/src/test/java/org/springframework/integration/security/TargetSecuringInterceptorTests.java +++ b/org.springframework.integration.security/src/test/java/org/springframework/integration/security/target/TargetSecuringInterceptorTests.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.integration.security; +package org.springframework.integration.security.target; import java.util.ArrayList; import java.util.List; @@ -25,8 +25,8 @@ import org.springframework.integration.message.Message; import org.springframework.integration.message.StringMessage; import org.springframework.integration.message.Target; import org.springframework.integration.security.SecurityContextUtils; -import org.springframework.integration.security.TargetSecuringInterceptor; import org.springframework.integration.security.config.SecurityTestUtil; +import org.springframework.integration.security.target.TargetSecuringInterceptor; import org.springframework.security.AccessDecisionManager; import org.springframework.security.AccessDeniedException; import org.springframework.security.ConfigAttributeDefinition;