| 1 28 package net.sf.jguard.core.authorization.policy; 29 30 import java.net.URL ; 31 import java.security.AccessControlContext ; 32 import java.security.CodeSource ; 33 import java.security.DomainCombiner ; 34 import java.security.Principal ; 35 import java.security.ProtectionDomain ; 36 import java.security.cert.Certificate ; 37 import java.util.ArrayList ; 38 import java.util.Collection ; 39 import java.util.Iterator ; 40 41 import javax.security.auth.Subject ; 42 43 import net.sf.jguard.core.authorization.domaincombiners.RestrictDomainCombiner; 44 import net.sf.jguard.core.authorization.domaincombiners.StackSubjectDomainCombiner; 45 import net.sf.jguard.core.principals.RolePrincipal; 46 47 55 public class AccessControlContextUtils { 56 57 62 public static AccessControlContext getRestrictedAccessControlContext(Principal principal){ 63 ProtectionDomain pd = ProtectionDomainUtils.getEmptyProtectionDomain(principal); 64 DomainCombiner restrictDomainCombiner = new RestrictDomainCombiner(); 65 AccessControlContext acc = new AccessControlContext (new ProtectionDomain []{pd}); 66 AccessControlContext acc2 = new AccessControlContext (acc,restrictDomainCombiner); 67 return acc2; 68 } 69 70 77 public static AccessControlContext getSubjectOnlyAccessControlContext(Subject subject){ 78 ProtectionDomain pd = new ProtectionDomain (new CodeSource ((URL )null,(Certificate [])null),null,Thread.currentThread().getContextClassLoader(),(Principal [])subject.getPrincipals().toArray(new Principal [subject.getPrincipals().size()])); 79 ProtectionDomain [] pds = new ProtectionDomain [1]; 80 pds[0] = pd; 81 AccessControlContext acc = new AccessControlContext (pds); 82 return acc; 83 } 84 85 public static AccessControlContext getStackSubjectAccessControlContext(Subject subject){ 86 ProtectionDomain [] arrayPd = new ProtectionDomain [0]; 87 AccessControlContext acc = new AccessControlContext (arrayPd); 88 DomainCombiner dc = new StackSubjectDomainCombiner(subject); 89 AccessControlContext acc2 = new AccessControlContext (acc,dc); 90 return acc2; 91 } 92 93 98 public static AccessControlContext getAccessControlContext(Collection principals){ 99 Iterator itPrincipals = principals.iterator(); 100 Collection protectionDomains = new ArrayList (); 101 while(itPrincipals.hasNext()){ 102 RolePrincipal principal = (RolePrincipal)itPrincipals.next(); 103 protectionDomains.add(ProtectionDomainUtils.getEmptyProtectionDomain(principal)); 104 } 105 AccessControlContext acc = new AccessControlContext ((ProtectionDomain []) protectionDomains.toArray(new ProtectionDomain [protectionDomains.size()])); 106 return acc; 107 } 108 109 } 110 | Popular Tags |