[jboss-cvs] Picketbox SVN: r463 - in trunk/security-jboss-sx/jbosssx/src: test/java/org/jboss/test/authorization and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Oct 22 09:23:23 EDT 2013
Author: sguilhen at redhat.com
Date: 2013-10-22 09:23:23 -0400 (Tue, 22 Oct 2013)
New Revision: 463
Added:
trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authorization/jacc/
trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authorization/jacc/JACCAuthorizationUnitTestCase.java
Modified:
trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/jacc/ContextPolicy.java
Log:
Add support for the JACC '**' role (any authenticated user).
Modified: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/jacc/ContextPolicy.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/jacc/ContextPolicy.java 2013-10-21 20:15:46 UTC (rev 462)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/jacc/ContextPolicy.java 2013-10-22 13:23:23 UTC (rev 463)
@@ -53,6 +53,8 @@
/** HashMap<String, Permissions> role name to permissions mapping */
private HashMap<String, Permissions> rolePermissions = new HashMap<String, Permissions>();
+ private static final String ANY_AUTHENTICATED_USER_ROLE = "**";
+
ContextPolicy(String contextID)
{
this.contextID = contextID;
@@ -122,24 +124,21 @@
principalNames.add(name);
}
}
- if( principalNames.size() > 0 )
+ if (principalNames.size() == 0)
+ PicketBoxLogger.LOGGER.traceNoPrincipalsInProtectionDomain(domain);
+
+ principalNames.add(ANY_AUTHENTICATED_USER_ROLE);
+ PicketBoxLogger.LOGGER.traceProtectionDomainPrincipals(principalNames);
+ for(int n = 0; implied == false && n < principalNames.size(); n ++)
{
- PicketBoxLogger.LOGGER.traceProtectionDomainPrincipals(principalNames);
- for(int n = 0; implied == false && n < principalNames.size(); n ++)
- {
- String name = principalNames.get(n);
- Permissions perms = rolePermissions.get(name);
- PicketBoxLogger.LOGGER.debugImpliesParameters(name, perms);
- if( perms == null )
- continue;
- implied = perms.implies(permission);
- PicketBoxLogger.LOGGER.debugImpliesResult(implied);
- }
+ String name = principalNames.get(n);
+ Permissions perms = rolePermissions.get(name);
+ PicketBoxLogger.LOGGER.debugImpliesParameters(name, perms);
+ if( perms == null )
+ continue;
+ implied = perms.implies(permission);
+ PicketBoxLogger.LOGGER.debugImpliesResult(implied);
}
- else
- {
- PicketBoxLogger.LOGGER.traceNoPrincipalsInProtectionDomain(domain);
- }
return implied;
}
Added: trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authorization/jacc/JACCAuthorizationUnitTestCase.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authorization/jacc/JACCAuthorizationUnitTestCase.java (rev 0)
+++ trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authorization/jacc/JACCAuthorizationUnitTestCase.java 2013-10-22 13:23:23 UTC (rev 463)
@@ -0,0 +1,69 @@
+package org.jboss.test.authorization.jacc;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import org.jboss.security.SimplePrincipal;
+import org.jboss.security.jacc.DelegatingPolicy;
+import org.jboss.security.jacc.JBossPolicyConfigurationFactory;
+import org.junit.Test;
+
+import javax.security.jacc.PolicyConfiguration;
+import javax.security.jacc.PolicyContext;
+import javax.security.jacc.WebResourcePermission;
+import java.security.Permission;
+import java.security.Policy;
+import java.security.Principal;
+import java.security.ProtectionDomain;
+
+/**
+ * This class tests the behavior of the PicketBox JACC policy implementation in scenarios that involve the usage of the
+ * "any authenticated user" role, "**".
+ */
+public class JACCAuthorizationUnitTestCase extends TestCase {
+
+ private static final String ANY_AUTHENTICATED_USER_ROLE = "**";
+
+ /**
+ * This test installs the PicketBox policy and registers a WebResourcePermission with the role "**" (any authenticated
+ * user). It then performs a series of implies methods, checking the results. Any authenticated user should be able
+ * to access the resource identified by the same pattern and HTTP methods as the registered WebResourcePermission
+ * irrespective of the security roles associated with that user.
+ *
+ * @throws Exception if an error occurs while running the test.
+ */
+ @Test
+ public void testAnyAuthenticatedUserRole() throws Exception {
+
+ Policy policy = new DelegatingPolicy();
+ Policy.setPolicy(policy);
+ PolicyContext.setContextID("testcontext");
+
+ PolicyConfiguration configuration =
+ new JBossPolicyConfigurationFactory().getPolicyConfiguration("testcontext", true);
+ // create a permission for a web resource using the role '**' (any authenticated user).
+ Permission permission = new WebResourcePermission("/test", "GET,POST");
+ configuration.addToRole(ANY_AUTHENTICATED_USER_ROLE, permission);
+ configuration.commit();
+
+ Principal[] roles = new Principal[]{new SimplePrincipal("Manager"), new SimplePrincipal("Administrator")};
+ // should match - same pattern, same methods. Authenticated user has a couple of roles.
+ boolean implies = policy.implies(new ProtectionDomain(null, null, null, roles),
+ new WebResourcePermission("/test", "POST,GET"));
+ Assert.assertTrue(implies);
+
+ // should match - same pattern, same methods. User contains has no roles.
+ implies = policy.implies(new ProtectionDomain(null, null, null, new Principal[]{}),
+ new WebResourcePermission("/test", "POST,GET"));
+ Assert.assertTrue(implies);
+
+ // should not match - supplied permission has a different pattern.
+ implies = policy.implies(new ProtectionDomain(null, null, null, roles),
+ new WebResourcePermission("/test/*", "GET,POST"));
+ Assert.assertFalse(implies);
+
+ // should not match - supplied permission has a different list of methods.
+ implies = policy.implies(new ProtectionDomain(null, null, null, roles),
+ new WebResourcePermission("/test/*", "GET,DELETE,PUT"));
+ Assert.assertFalse(implies);
+ }
+}
More information about the jboss-cvs-commits
mailing list