KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tirsen > nanning > samples > prevayler > AuthenticatedCall


1 package com.tirsen.nanning.samples.prevayler;
2
3 import java.util.HashSet JavaDoc;
4 import java.util.Set JavaDoc;
5 import java.security.AccessController JavaDoc;
6 import java.security.PrivilegedExceptionAction JavaDoc;
7 import java.security.PrivilegedActionException JavaDoc;
8 import java.io.Serializable JavaDoc;
9
10 import javax.security.auth.Subject JavaDoc;
11
12 import com.tirsen.nanning.Invocation;
13 import org.apache.commons.collections.CollectionUtils;
14 import org.apache.commons.collections.Predicate;
15
16 public class AuthenticatedCall extends Call {
17     static final long serialVersionUID = 8405907347881334801L;
18
19     protected Set JavaDoc principals;
20     protected Set JavaDoc privateCredentials;
21     protected Set JavaDoc publicCredentials;
22
23     private static final Predicate isSerializable = new Predicate() {
24         public boolean evaluate(Object JavaDoc o) {
25             return o instanceof Serializable JavaDoc;
26         }
27     };
28
29     public AuthenticatedCall() {
30         Subject JavaDoc subject = Subject.getSubject(AccessController.getContext());
31         if (subject != null) {
32             principals = new HashSet JavaDoc(subject.getPrincipals());
33             CollectionUtils.filter(principals, isSerializable);
34             privateCredentials = new HashSet JavaDoc(subject.getPrivateCredentials());
35             CollectionUtils.filter(privateCredentials, isSerializable);
36             publicCredentials = new HashSet JavaDoc(subject.getPublicCredentials());
37             CollectionUtils.filter(publicCredentials, isSerializable);
38         }
39     }
40
41     public AuthenticatedCall(Invocation invocation) throws Exception JavaDoc {
42         this();
43         setInvocation(invocation);
44     }
45
46     public Subject JavaDoc getSubject() {
47         if (principals == null && publicCredentials == null && privateCredentials == null) {
48             return null;
49         } else {
50             return new Subject JavaDoc(false, principals == null ? new HashSet JavaDoc() : principals, publicCredentials == null ? new HashSet JavaDoc() : publicCredentials, privateCredentials == null ? new HashSet JavaDoc() : privateCredentials);
51         }
52     }
53
54     public Object JavaDoc invoke() throws Exception JavaDoc {
55         try {
56             return Subject.doAs(getSubject(), new PrivilegedExceptionAction JavaDoc() {
57                 public Object JavaDoc run() throws Exception JavaDoc {
58                     return AuthenticatedCall.super.invoke();
59                 }
60             });
61         } catch (PrivilegedActionException JavaDoc e) {
62             throw e.getException();
63         }
64     }
65 }
66
Popular Tags