1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package net.sf.jguard.core.authorization.permissions;
29
30 import java.security.CodeSource;
31 import java.security.Permission;
32 import java.security.PermissionCollection;
33 import java.security.ProtectionDomain;
34 import java.security.cert.Certificate;
35 import java.util.Enumeration;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38
39
40
41
42
43 public class AuditPermissionCollection extends PermissionCollection{
44
45 private PermissionCollection pm;
46 private ProtectionDomain pDomain;
47 private CodeSource cs;
48 private static Logger logger = LoggerFactory.getLogger(AuditPermissionCollection.class.getName());
49 private boolean protectionDomainMode;
50
51
52
53
54
55
56 public AuditPermissionCollection(PermissionCollection permissionCollection,ProtectionDomain protectionDomain){
57 this.pm = permissionCollection;
58 this.pDomain = protectionDomain;
59 protectionDomainMode = true;
60 }
61
62
63
64
65
66
67 public AuditPermissionCollection(PermissionCollection permissionCollection,CodeSource codeSource){
68 this.pm = permissionCollection;
69 this.cs = codeSource;
70 protectionDomainMode = false;
71 }
72 public void add(Permission permission) {
73 pm.add(permission);
74 }
75
76 public boolean implies(Permission permission) {
77 boolean result = pm.implies(permission);
78 if(protectionDomainMode){
79
80
81
82 logPermissionCollection(pm);
83 logger.debug(" ProtectionDomain permission check "+permission.toString()+" result="+Boolean.valueOf(result));
84 }else if (cs!=null){
85
86 Certificate[] certs = cs.getCertificates();
87
88
89 logger.debug(" CodeSource permission check "+permission.toString()+" result="+Boolean.valueOf(result));
90 }
91 return result;
92
93 }
94
95 public Enumeration elements() {
96 return pm.elements();
97 }
98
99 private void logPermissionCollection(PermissionCollection pm){
100 Enumeration enumPerm = pm.elements();
101 while(enumPerm.hasMoreElements()){
102 Permission perm =(Permission)enumPerm.nextElement();
103 logger.debug("@@ user has got "+perm.getClass().getName()+" name="+perm.getName()+" actions="+perm.getActions()+" @@");
104 }
105 }
106
107 }