1 /*
2  * Created on Aug 24, 2003
3  */
4 package org.jyperion.j2ee.sample.sfsb;
5 
6 import java.lang.reflect.Method;
7 import java.security.Principal;
8 import java.security.acl.Group;
9 import java.util.Enumeration;
10import java.util.Iterator;
11
12import javax.ejb.EJBContext;
13import javax.naming.InitialContext;
14import javax.naming.NamingException;
15import javax.security.auth.Subject;
16
17import org.jboss.security.SecurityProxy;
18
19/**
20 * @author janaudy
21 */
22public class CartBeanSecurityProxy implements SecurityProxy {
23    /**
24     * ThreadLocal
25     */
26    private ThreadLocal threadLocal = new ThreadLocal();
27
28    /**
29     * @see org.jboss.security.SecurityProxy#init(java.lang.Class, java.lang.Class, java.lang.Class, java.lang.Class, java.lang.Object)
30     */
31    public void init(
32        Class arg0,
33        Class arg1,
34        Class arg2,
35        Class arg3,
36        Object arg4)
37        throws InstantiationException {
38        System.out.println("Initializing CartBeanSecurityProxy (5 args)...");
39    }
40
41    /**
42     * @see org.jboss.security.SecurityProxy#init(java.lang.Class, java.lang.Class, java.lang.Object)
43     */
44    public void init(Class beanHome, Class beanRemote, Object securityManager)
45        throws InstantiationException {
46        System.out.println("!! Initializing CartBeanSecurityProxy (3 args)...");
47    }
48
49    /**
50     * @see org.jboss.security.SecurityProxy#invoke(java.lang.reflect.Method, java.lang.Object[], java.lang.Object)
51     */
52    public void invoke(Method method, Object[] args, Object bean)
53        throws Exception {
54        if (!(bean instanceof CartBean))
55            throw new SecurityException("Invalid bean instance for security proxy");
56            
57        System.out.println("CartBeanSecurityProxy:: Methode: " + method.getName());
58
59        try {
60            InitialContext ic = new InitialContext();
61            Subject subject =
62                (Subject) ic.lookup("java:comp/env/security/subject");
63            Iterator principals = subject.getPrincipals().iterator();
64            while (principals.hasNext()) {
65                Principal p = (Principal) principals.next();
66                System.out.println(
67                    "!! Principal ("
68                        + p.getClass().getName()
69                        + ") : "
70                        + p.getName());
71            }
72            // To get the roles (the instance of java.security.acl.Group in the list of Principals)
73            principals =
74                subject.getPrincipals(java.security.acl.Group.class).iterator();
75            if (principals.hasNext()) {
76                Group roles = (Group) principals.next();
77                Enumeration roleEnum = roles.members();
78                while (roleEnum.hasMoreElements()) {
79                    System.out.println("!! Role:  " + roleEnum.nextElement());
80                }
81            }
82        } catch (NamingException ne) {
83            System.out.println("Lookup on Subject failed " + ne.getLocalizedMessage());
84            throw new SecurityException("Unable to obtain active Subject");
85        }
86
87//      EJBContext ctx = (EJBContext) this.threadLocal.get();
88//      String caller = ctx.getCallerPrincipal().getName();
89//      CartBean account = (CartBean) bean;
90//      String operation = method.getName();
91//      System.out.println("invoke " + operation + " called by " + caller);
92    }
93
94    /**
95     * @see org.jboss.security.SecurityProxy#invokeHome(java.lang.reflect.Method, java.lang.Object[])
96     */
97    public void invokeHome(Method method, Object[] args) throws Exception {
98        System.out.println("InvokeHome on " + method.getName());
99    }
00
01    /**
02     * @see org.jboss.security.SecurityProxy#setEJBContext(javax.ejb.EJBContext)
03     */
04    public void setEJBContext(EJBContext ejbContext) {
05        System.out.println("Setting EJBContext ...");
06        this.threadLocal.set(ejbContext);
07    }
08}
09