Este contenido no está disponible en el idioma seleccionado.
Chapter 16. Example of Authorization
The following is a test case for the default implementation's
JBossAuthorizationManager. It tests the web layer's authorization module. The default web layer module permits all actions, because decisions are handled by the Tomcat RealmBase. Note that AuthorizationModule is injected into the AuthorizationInfo class, which is part of the ApplicationPolicy object set in the SecurityConfiguration.
package org.jboss.test.authorization;
import java.security.Principal;
import java.security.acl.Group;
import java.util.HashMap;
import javax.security.auth.Subject;
import javax.security.jacc.PolicyContext;
import org.jboss.security.AuthorizationManager;
import org.jboss.security.SecurityConstants;
import org.jboss.security.SecurityContext;
import org.jboss.security.SimpleGroup;
import org.jboss.security.SimplePrincipal;
import org.jboss.security.authorization.ResourceKeys;
import org.jboss.security.authorization.config.AuthorizationModuleEntry;
import org.jboss.security.authorization.resources.WebResource;
import org.jboss.security.config.ApplicationPolicy;
import org.jboss.security.config.AuthorizationInfo;
import org.jboss.security.config.SecurityConfiguration;
import org.jboss.security.jacc.SubjectPolicyContextHandler;
import org.jboss.security.plugins.JBossAuthorizationManager;
import org.jboss.security.plugins.SecurityContextAssociation;
import org.jboss.security.plugins.SecurityContextFactory;
import org.jboss.test.authorization.xacml.TestHttpServletRequest;
import junit.framework.TestCase;
/**
* Unit test the JBossAuthorizationManager
*/
public class JBossAuthorizationManagerUnitTestCase extends TestCase
{
private Principal p = new SimplePrincipal("jduke");
private String contextID = "web.jar";
private String uri = "/xacml-subjectrole/test";
protected void setUp() throws Exception
{
super.setUp();
setSecurityContext();
setUpPolicyContext();
setSecurityConfiguration();
}
public void testAuthorization() throws Exception
{
HashMap cmap = new HashMap();
cmap.put(ResourceKeys.WEB_REQUEST, new TestHttpServletRequest(p,"test", "get"));
WebResource wr = new WebResource(cmap);
AuthorizationManager am = new JBossAuthorizationManager("other");
am.authorize(wr);//This should just pass as the default module PERMITS all
}
private Group getRoleGroup()
{
Group gp = new SimpleGroup(SecurityConstants.ROLES_IDENTIFIER);
gp.addMember(new SimplePrincipal("ServletUserRole"));
return gp;
}
private void setSecurityContext()
{
Subject subj = new Subject();
subj.getPrincipals().add(p);
SecurityContext sc = SecurityContextFactory.createSecurityContext("other");
sc.getUtil().createSubjectInfo(p, "cred", subj);
sc.getUtil().setRoles(getRoleGroup());
SecurityContextAssociation.setSecurityContext(sc);
}
private void setUpPolicyContext() throws Exception
{
PolicyContext.setContextID(contextID);
PolicyContext.registerHandler(SecurityConstants.SUBJECT_CONTEXT_KEY,
new SubjectPolicyContextHandler(), true);
}
private void setSecurityConfiguration() throws Exception
{
String name = "org.jboss.security.authorization.modules.web.WebAuthorizationModule";
ApplicationPolicy ap = new ApplicationPolicy("other");
AuthorizationInfo ai = new AuthorizationInfo("other");
AuthorizationModuleEntry ame = new AuthorizationModuleEntry(name);
ai.add(ame);
ap.setAuthorizationInfo(ai);
SecurityConfiguration.addApplicationPolicy(ap);
}
}
package org.jboss.test.authorization;
import java.security.Principal;
import java.security.acl.Group;
import java.util.HashMap;
import javax.security.auth.Subject;
import javax.security.jacc.PolicyContext;
import org.jboss.security.AuthorizationManager;
import org.jboss.security.SecurityConstants;
import org.jboss.security.SecurityContext;
import org.jboss.security.SimpleGroup;
import org.jboss.security.SimplePrincipal;
import org.jboss.security.authorization.ResourceKeys;
import org.jboss.security.authorization.config.AuthorizationModuleEntry;
import org.jboss.security.authorization.resources.WebResource;
import org.jboss.security.config.ApplicationPolicy;
import org.jboss.security.config.AuthorizationInfo;
import org.jboss.security.config.SecurityConfiguration;
import org.jboss.security.jacc.SubjectPolicyContextHandler;
import org.jboss.security.plugins.JBossAuthorizationManager;
import org.jboss.security.plugins.SecurityContextAssociation;
import org.jboss.security.plugins.SecurityContextFactory;
import org.jboss.test.authorization.xacml.TestHttpServletRequest;
import junit.framework.TestCase;
/**
* Unit test the JBossAuthorizationManager
*/
public class JBossAuthorizationManagerUnitTestCase extends TestCase
{
private Principal p = new SimplePrincipal("jduke");
private String contextID = "web.jar";
private String uri = "/xacml-subjectrole/test";
protected void setUp() throws Exception
{
super.setUp();
setSecurityContext();
setUpPolicyContext();
setSecurityConfiguration();
}
public void testAuthorization() throws Exception
{
HashMap cmap = new HashMap();
cmap.put(ResourceKeys.WEB_REQUEST, new TestHttpServletRequest(p,"test", "get"));
WebResource wr = new WebResource(cmap);
AuthorizationManager am = new JBossAuthorizationManager("other");
am.authorize(wr);//This should just pass as the default module PERMITS all
}
private Group getRoleGroup()
{
Group gp = new SimpleGroup(SecurityConstants.ROLES_IDENTIFIER);
gp.addMember(new SimplePrincipal("ServletUserRole"));
return gp;
}
private void setSecurityContext()
{
Subject subj = new Subject();
subj.getPrincipals().add(p);
SecurityContext sc = SecurityContextFactory.createSecurityContext("other");
sc.getUtil().createSubjectInfo(p, "cred", subj);
sc.getUtil().setRoles(getRoleGroup());
SecurityContextAssociation.setSecurityContext(sc);
}
private void setUpPolicyContext() throws Exception
{
PolicyContext.setContextID(contextID);
PolicyContext.registerHandler(SecurityConstants.SUBJECT_CONTEXT_KEY,
new SubjectPolicyContextHandler(), true);
}
private void setSecurityConfiguration() throws Exception
{
String name = "org.jboss.security.authorization.modules.web.WebAuthorizationModule";
ApplicationPolicy ap = new ApplicationPolicy("other");
AuthorizationInfo ai = new AuthorizationInfo("other");
AuthorizationModuleEntry ame = new AuthorizationModuleEntry(name);
ai.add(ame);
ap.setAuthorizationInfo(ai);
SecurityConfiguration.addApplicationPolicy(ap);
}
}