1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mortbay.jetty.plus.jaas;
17
18 import java.security.Principal;
19 import java.security.acl.Group;
20 import java.util.Stack;
21
22 import javax.security.auth.Subject;
23 import javax.security.auth.login.LoginContext;
24
25
26
27
28
29
30
31
32
33
34
35 public class JAASUserPrincipal implements Principal
36 {
37
38
39
40
41
42
43
44 public static class RoleStack
45 {
46 private static ThreadLocal local = new ThreadLocal();
47
48
49 public static boolean empty ()
50 {
51 Stack s = (Stack)local.get();
52
53 if (s == null)
54 return false;
55
56 return s.empty();
57 }
58
59
60
61 public static void push (JAASRole role)
62 {
63 Stack s = (Stack)local.get();
64
65 if (s == null)
66 {
67 s = new Stack();
68 local.set (s);
69 }
70
71 s.push (role);
72 }
73
74
75 public static void pop ()
76 {
77 Stack s = (Stack)local.get();
78
79 if ((s == null) || s.empty())
80 return;
81
82 s.pop();
83 }
84
85 public static JAASRole peek ()
86 {
87 Stack s = (Stack)local.get();
88
89 if ((s == null) || (s.empty()))
90 return null;
91
92
93 return (JAASRole)s.peek();
94 }
95
96 public static void clear ()
97 {
98 Stack s = (Stack)local.get();
99
100 if ((s == null) || (s.empty()))
101 return;
102
103 s.clear();
104 }
105
106 }
107
108 private Subject subject = null;
109 private JAASUserRealm realm = null;
110 private static RoleStack runAsRoles = new RoleStack();
111 private RoleCheckPolicy roleCheckPolicy = null;
112 private String name = null;
113 private LoginContext loginContext = null;
114
115
116
117
118
119
120
121
122
123 public JAASUserPrincipal(JAASUserRealm realm, String name)
124 {
125 this.name = name;
126 this.realm = realm;
127 }
128
129
130 public JAASUserRealm getRealm()
131 {
132 return this.realm;
133 }
134
135
136
137
138
139
140 public boolean isUserInRole (String roleName)
141 {
142 if (roleCheckPolicy == null)
143 roleCheckPolicy = new StrictRoleCheckPolicy();
144
145
146 return roleCheckPolicy.checkRole (roleName,
147 runAsRoles.peek(),
148 getRoles());
149 }
150
151
152
153
154
155
156 public Group getRoles ()
157 {
158 return getRealm().getRoles(this);
159 }
160
161
162
163
164
165 public void setRoleCheckPolicy (RoleCheckPolicy policy)
166 {
167 roleCheckPolicy = policy;
168 }
169
170
171
172
173
174
175 public void pushRole (String roleName)
176 {
177 runAsRoles.push (new JAASRole(roleName));
178 }
179
180
181
182
183
184 public void popRole ()
185 {
186 runAsRoles.pop ();
187 }
188
189
190
191
192
193 public void disassociate ()
194 {
195 runAsRoles.clear();
196 }
197
198
199
200
201
202 public String getName ()
203 {
204 return name;
205 }
206
207
208
209
210
211
212
213
214
215
216 protected void setSubject (Subject subject)
217 {
218 this.subject = subject;
219 }
220
221
222
223
224 public Subject getSubject ()
225 {
226 return this.subject;
227 }
228
229 protected void setLoginContext (LoginContext loginContext)
230 {
231 this.loginContext = loginContext;
232 }
233
234 protected LoginContext getLoginContext ()
235 {
236 return this.loginContext;
237 }
238
239 public String toString()
240 {
241 return getName();
242 }
243
244 }