From: matt10 <do-...@jb...> - 2006-07-17 15:28:43
|
Hi, In an EJB 3.0 application I have methods on a session bean that delegate calls to a POJO @Service. I have just started to apply security, starting with a UsersRolesLoginModule which seems to be working for the session bean calls from the client. I presume that if the authenticated user can call a method on the session bean, that the session bean can call a method on the @Service with identical @RolesAllowed, but I get a javax.ejb.EJBAccessException: Authentication failure. Method on session bean: @SecurityDomain("mydomain") @PermitAll public @Stateful class UserSessionBean implements UserSession { @EJB ServerLocal server; @PostConstruct public void initSession() { logger.info("UserSession @PostConstruct"); sessionID = server.registerUserSession(); } }; Error: 15:22:31,105 ERROR [STDERR] java.lang.RuntimeException: javax.ejb.EJBAccessException: Authentication failure 15:22:31,105 ERROR [STDERR] at org.jboss.ejb3.interceptor.LifecycleInterceptorHandler.postConstruct(LifecycleInterceptorHandler.java:109) 15:22:31,105 ERROR [STDERR] at org.jboss.ejb3.EJBContainer.invokePostConstruct(EJBContainer.java:582) 15:22:31,105 ERROR [STDERR] at org.jboss.ejb3.AbstractPool.create(AbstractPool.java:108) 15:22:31,105 ERROR [STDERR] at org.jboss.ejb3.ThreadlocalPool.get(ThreadlocalPool.java:48) 15:22:31,106 ERROR [STDERR] at org.jboss.ejb3.cache.simple.SimpleStatefulCache.create(SimpleStatefulCache.java:207) 15:22:31,106 ERROR [STDERR] at org.jboss.ejb3.stateful.StatefulContainer.dynamicInvoke(StatefulContainer.java:288) 15:22:31,106 ERROR [STDERR] at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106) 15:22:31,106 ERROR [STDERR] at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) 15:22:31,106 ERROR [STDERR] at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828) 15:22:31,106 ERROR [STDERR] at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681) 15:22:31,106 ERROR [STDERR] at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358) 15:22:31,106 ERROR [STDERR] at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:412) 15:22:31,106 ERROR [STDERR] at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239) 15:22:31,106 ERROR [STDERR] Caused by: javax.ejb.EJBAccessException: Authentication failure 15:22:31,106 ERROR [STDERR] at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.handleGeneralSecurityException(Ejb3AuthenticationInterceptor.java:68) 15:22:31,106 ERROR [STDERR] at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:71) 15:22:31,106 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 15:22:31,106 ERROR [STDERR] at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47) 15:22:31,106 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 15:22:31,106 ERROR [STDERR] at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) 15:22:31,106 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 15:22:31,106 ERROR [STDERR] at org.jboss.ejb3.service.ServiceContainer.localInvoke(ServiceContainer.java:199) 15:22:31,106 ERROR [STDERR] at org.jboss.ejb3.service.ServiceLocalProxy.invoke(ServiceLocalProxy.java:75) 15:22:31,106 ERROR [STDERR] at $Proxy246.registerUserSession(Unknown Source) 15:22:31,106 ERROR [STDERR] at org.myapplication.server.UserSessionBean.initSession(UserSessionBean.java:62) 15:22:31,106 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 15:22:31,107 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 15:22:31,107 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 15:22:31,107 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585) 15:22:31,107 ERROR [STDERR] at org.jboss.ejb3.interceptor.LifecycleInvocationContextImpl.proceed(LifecycleInvocationContextImpl.java:159) 15:22:31,107 ERROR [STDERR] at org.jboss.ejb3.interceptor.LifecycleInterceptorHandler.postConstruct(LifecycleInterceptorHandler.java:105) 15:22:31,107 ERROR [STDERR] ... 12 more 15:22:31,107 ERROR [STDERR] Caused by: javax.security.auth.login.FailedLoginException: Password Incorrect/Password Required 15:22:31,107 ERROR [STDERR] at org.jboss.security.auth.spi.UsernamePasswordLoginModule.login(UsernamePasswordLoginModule.java:213) 15:22:31,107 ERROR [STDERR] at org.jboss.security.auth.spi.UsersRolesLoginModule.login(UsersRolesLoginModule.java:152) 15:22:31,107 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 15:22:31,110 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 15:22:31,110 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 15:22:31,110 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585) 15:22:31,110 ERROR [STDERR] at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769) 15:22:31,110 ERROR [STDERR] at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186) 15:22:31,110 ERROR [STDERR] at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683) 15:22:31,110 ERROR [STDERR] at java.security.AccessController.doPrivileged(Native Method) 15:22:31,110 ERROR [STDERR] at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) 15:22:31,110 ERROR [STDERR] at javax.security.auth.login.LoginContext.login(LoginContext.java:579) 15:22:31,110 ERROR [STDERR] at org.jboss.security.plugins.JaasSecurityManager.defaultLogin(JaasSecurityManager.java:601) 15:22:31,110 ERROR [STDERR] at org.jboss.security.plugins.JaasSecurityManager.authenticate(JaasSecurityManager.java:535) 15:22:31,110 ERROR [STDERR] at org.jboss.security.plugins.JaasSecurityManager.isValid(JaasSecurityManager.java:344) 15:22:31,110 ERROR [STDERR] at org.jboss.aspects.security.AuthenticationInterceptor.authenticate(AuthenticationInterceptor.java:121) 15:22:31,110 ERROR [STDERR] at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:67) 15:22:31,110 ERROR [STDERR] ... 27 more I'm unable to rule out the possibility that the client is failing to authenticate, this is as far as I have got. To the more experienced with Jboss/EJB3 security, my question is, should the @PostConstruct method be able to call the @Service method and will the identity of the logged-in user apply to the call? Or is this simply a failure to authenticate at all what with this being the first method call? The worrying thing is that on the client according to debug log messages, my simple CallbackHandler passed to LoginContext never gets called for the username and password. This I am also confused about. The client code looks like this: System.setProperty("java.security.auth.login.config", "src/META-INF/auth.conf"); CallbackHandler myHandler = new LoginCallbackHandler(); // LoginContext lc = new LoginContext("testuser", myHandler); LoginContext lc = new LoginContext("mydomain", new org.jboss.security.auth.callback.UsernamePasswordHandler("testuser", "testpass")); try { lc.login(); } catch (LoginException le) { System.out.println("Login failed"); le.printStackTrace(); } Properties env = new Properties(); // env.setProperty(Context.SECURITY_PRINCIPAL, "testuser"); // env.setProperty(Context.SECURITY_CREDENTIALS, "testpass"); env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); // MC env.setProperty(Context.PROVIDER_URL, hostname); // Contact EJB server // Context ctx = new LoginInitialContextFactory().getInitialContext(env); InitialContext ctx = new InitialContext(env); session = (UserSession) ctx.lookup("MyApplication/UserSessionBean/remote"); I have spent all day looking on the web and in forums for hints, and trying things. Can anyone help? Matt View the original post : http://staging.jboss.com/index.html?module=bb&op=viewtopic&p=3890825#3890825 Reply to the post : http://staging.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3890825 |