01: /*
02: jGuard is a security framework based on top of jaas (java authentication and authorization security).
03: it is written for web applications, to resolve simply, access control problems.
04: version $Name: $
05: http://sourceforge.net/projects/jguard/
06:
07: Copyright (C) 2004 Charles GAY
08:
09: This library is free software; you can redistribute it and/or
10: modify it under the terms of the GNU Lesser General Public
11: License as published by the Free Software Foundation; either
12: version 2.1 of the License, or (at your option) any later version.
13:
14: This library is distributed in the hope that it will be useful,
15: but WITHOUT ANY WARRANTY; without even the implied warranty of
16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17: Lesser General Public License for more details.
18:
19: You should have received a copy of the GNU Lesser General Public
20: License along with this library; if not, write to the Free Software
21: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22:
23:
24: jGuard project home page:
25: http://sourceforge.net/projects/jguard/
26:
27: */
28: package net.sf.jguard.core.authorization.domaincombiners;
29:
30: import java.net.URL;
31: import java.security.CodeSource;
32: import java.security.DomainCombiner;
33: import java.security.Principal;
34: import java.security.ProtectionDomain;
35: import java.security.cert.Certificate;
36:
37: import javax.security.auth.Subject;
38:
39: /**
40: * @author <a href="mailto:diabolo512@users.sourceforge.net">Charles Gay</a>
41: * @author <a href="mailto:vberetti@users.sourceforge.net">Vincent Beretti</a>
42: */
43: public class StackSubjectDomainCombiner implements DomainCombiner {
44: private Subject subject;
45:
46: public StackSubjectDomainCombiner(Subject subj) {
47: this .subject = subj;
48: }
49:
50: /**
51: * creates a new array of <code>ProtectionDomain</code>s
52: * adds on the top of the currentDomains a new ProtectionDomain with null CodeSource,
53: * a null classloader, empty permissions collection and the subject principals.<br>
54: * assignedDomains is not combined.
55: * @param currentDomains ProtectionDomain[]
56: * @param assignedDomains ProtectionDomain[]
57: */
58: public ProtectionDomain[] combine(
59: ProtectionDomain[] currentDomains,
60: ProtectionDomain[] assignedDomains) {
61: ProtectionDomain[] combinedPd = new ProtectionDomain[currentDomains.length + 1];
62: System.arraycopy(currentDomains, 0, combinedPd, 0,
63: currentDomains.length);
64: CodeSource cs = new CodeSource((URL) null, (Certificate[]) null);
65: combinedPd[currentDomains.length] = new ProtectionDomain(cs,
66: null, null, (Principal[]) subject.getPrincipals()
67: .toArray(
68: new Principal[subject.getPrincipals()
69: .size()]));
70: return combinedPd;
71: }
72:
73: }
|