2 Replies Latest reply: Jun 8, 2010 5:12 PM by Breako Beats RSS

Having major problems setting up a user on JNDI Security

Breako Beats Newbie

Hi,

According to this cool and short article: http://community.jboss.org/wiki/JndiLoginInitialContextFactory

I should be able to set up a User / Password on JNDI as described in the article and invoke an EJB method that has security constraints.

 

Here is my EJB:

 

@Stateless
@SecurityDomain("TitanIdentityDB")
@RolesAllowed("AUTHORIZED_MERCHANT")
public class TravelAgentBean implements TravelAgentRemote {


    public Cabin findCabin(int pKey) {
        ...
    }

}

 

Here is the application-policy I added to login-config.xml

 

<application-policy name="TitanIdentityDB">
    <authentication>
      <login-module code="org.jboss.security.auth.spi.UserRolesLoginModule"
        flag="required">
         <!-- Any existing security context will be restored on logout -->
         <module-option name="usersProperties">props/user-titan.properties</module-option>
         <module-option name="rolesProperties">props/roles-titan.properties</module-option>
      </login-module>
    </authentication>
  </application-policy>

 

Here is user-titan.properties

 

admin=admin

 

Here is roles-titan.properties

 

admin=AUTHORIZED_MERCHANT

 

 

And here is my stand alone client which runs outside the EJB container.

 

public class TextClient {

 

     public static Context getInitialContext() throws NamingException {
        if (context == null){
            Properties p = new Properties();
            p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");
            p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
            p.put(Context.SECURITY_PRINCIPAL, "admin");
            p.put(Context.SECURITY_CREDENTIALS, "admin");
            context = new javax.naming.InitialContext(p);
        }
        return context;
     }

 

     public static void main(String[] args) throws Exception{
        java.lang.Object ref = getInitialContext().lookup("TravelAgentBean/remote");

        TravelAgentRemote dao =
            (TravelAgentRemote)PortableRemoteObject.narrow(ref, TravelAgentRemote.class);

            cabin_2 = dao.findCabin(1);

     }

 

}

 

When I run the client I keep getting:

 

Exception in thread "main" javax.ejb.EJBAccessException: Invalid User
    at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:165)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

 

And I am tearing my hair out about this all day.

 

Any ideas?

 

Thanks in Advance.