On Jul 24, 2009, at 7:24 AM, Juergen Weber wrote:


Hi,

I wanted to test the call chain like this:

Java Client -> as tomcat -> UnSecured3Bean -> as apache -> Secured3Bean

i.e. the first bean should call the second one with another user that the
first bean is running under:

        SimpleCallbackHandler handler = new SimpleCallbackHandler(
                                        user, password.toCharArray());

                        LoginContext lc = new LoginContext("geronimo-admin", 
handler);
                        lc.login();

                        Subject subject = lc.getSubject();
                        System.out.println("lc.getSubject: " + subject);

                        Callers oldCallers = 
ContextManager.pushNextCaller(subject);
                        try
                        {
                                s1 = secured3Bean.secureMethod(input);
                        }
                        finally
                        {
                                ContextManager.popCallers(oldCallers);
                        }

But this results in NPE in
java.lang.NullPointerException
       at
org .apache .geronimo .security.ContextManager.getCurrentContext(ContextManager.java:201)
       at
org .apache .geronimo .openejb .GeronimoSecurityService .isCallerAuthorized(GeronimoSecurityService.java:102)

,which is the second line of
     assert context != null : "No registered context";

       return context.getContext();

so it should never be null.
Is that a bug or is s.th. wrong with my code? I append the sample project.

Geronimo uses the AccessControlContext for the Subject to evaluate security decisions. So, you need to get Geronimo to compute and store this ACC for you.

You can do this by calling ContextManager login(String realm, CallbackHandler callbackHandler, Configuration configuration) or login(String realm, CallbackHandler callbackHandler) instead of creating your own LoginContext, or by calling ContextManager.registerSubject(Subject subject) after logging in.

After you've registered the Subject, setting the callers will result in the lookup for the ACC succeeding instead of giving you an NPE.

At the moment I don't recall why we pass Subjects around rather than identity objects that have both the Subject and the ACC in them.

thanks
david jencks

Thanks,
Juergen

http://www.nabble.com/file/p24645453/SecuredEJBGeronimo.zip
SecuredEJBGeronimo.zip

unsecureMethod called
callerPrincipal: tomcat
is caller in role Member_admin: false
lc.getSubject: Subject:
       Principal: users
       Principal: tomcatgroup
       Principal: apache

java.lang.NullPointerException
       at
org .apache .geronimo .security.ContextManager.getCurrentContext(ContextManager.java:201)
       at
org .apache .geronimo .openejb .GeronimoSecurityService .isCallerAuthorized(GeronimoSecurityService.java:102)
       at
org .apache .openejb .core.stateless.StatelessContainer.invoke(StatelessContainer.java:151)
       at
org .apache .openejb .core .ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java: 217)
       at
org .apache .openejb .core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
       at
org .apache .openejb .core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:281)
       at $Proxy73.secureMethod(Unknown Source)
       at ejb3.UnSecured3Bean.unsecureMethod(UnSecured3Bean.java:57)


--
View this message in context: 
http://www.nabble.com/NPE-in-ContextManager.getCurrentContext-tp24645453s134p24645453.html
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.

Reply via email to