Quoting Quique Ruiz-Valenciano <[EMAIL PROTECTED]>:

> > 
> > I'm trying to understand security in JBoss.
> > 
> > I took the example from the JBoss-2.4.x PDF and stripped it down. When
> I run 
> > it, I get the following exception:
> > 
> > Failed toload user/spasswords/role files
> > java.io.IOException: Properties file usres.properties not found.
> > <stack trace omitted>
> > 
> > I have a client (not a servlet, jsp, or ejb) trying to connect to an
> EJB. 
> > 
> > The failure occured on the line 
> >   lc.login()
> > 
> > where lc is defined as
> > 
> >   LoginContext lc = new LoginContext("user", handler);
> > 
> > java.security.auth.login.config property is defined and points to
> auth.conf.
> > 
> > Any suggestions on this one? Looking at the archives shows previous
> errors like 
> > this, but no solutions to my case when the client is a "true client"
> and not a 
> > servlet or another EJB.
> > 
> 
> Hello Ed,
> 
> Could you send us the auth.conf file?

I use client-login. My auth.conf file follows:

simple {
    // Very simple login module: 
    // any user name is accepted.
    // password should either coincide with user name or be null, 
    // all users have role "guest", 
    // users with non-null password also have role "user"
    org.jboss.security.auth.spi.SimpleServerLoginModule required;
};

// Used by clients within the application server VM such as
// mbeans and servlets that access EJBs.
client-login {
    org.jboss.security.ClientLoginModule required;
};

// The default server login module
other {
    // A simple server login module, which can be used when the number 
    // of users is relatively small. It uses two properties files:
    //   users.properties, which holds users (key) and their password (value).
    //   roles.properties, which holds users (key) and a comma-separated list 
of their roles (value).
    // The unauthenticatedIdentity property defines the name of the principal
    // that will be used when a null username and password are presented as is
    // the case for an unuathenticated web client or MDB. If you want to
    // allow such users to be authenticated add the property, e.g.,
    //   unauthenticatedIdentity="nobody"
    org.jboss.security.auth.spi.UsersRolesLoginModule required
        ;

};
 

-----------

Here's teh exact stack trace:

RROR [main] (?:?) - Failed to load users/passwords/role files
java.io.IOException: Properties file users.properties not found
        at org.jboss.security.auth.spi.UsersRolesLoginModule.loadProperties
(UsersRolesLoginModule.java:199)
        at org.jboss.security.auth.spi.UsersRolesLoginModule.loadUsers
(UsersRolesLoginModule.java:180)
        at org.jboss.security.auth.spi.UsersRolesLoginModule.initialize
(UsersRolesLoginModule.java:79)
        at java.lang.reflect.Method.invoke(Native Method)
        at javax.security.auth.login.LoginContext.invoke(LoginContext.java:582)
        at javax.security.auth.login.LoginContext.access$000
(LoginContext.java:125)
        at javax.security.auth.login.LoginContext$3.run(LoginContext.java:531)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.login.LoginContext.invokeModule
(LoginContext.java:528)
        at javax.security.auth.login.LoginContext.login(LoginContext.java:449)
        at sectest.TestLogin.<init>(TestLogin.java:82)
        at sectest.TestLogin.main(TestLogin.java:240)
javax.security.auth.login.LoginException: Missing users.properties file.
        at org.jboss.security.auth.spi.UsersRolesLoginModule.login
(UsersRolesLoginModule.java:105)
        at java.lang.reflect.Method.invoke(Native Method)
        at javax.security.auth.login.LoginContext.invoke(LoginContext.java:595)
        at javax.security.auth.login.LoginContext.access$000
(LoginContext.java:125)-- Failed initializing bean access.

        at javax.security.auth.login.LoginContext$3.run(LoginContext.java:531)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.login.LoginContext.invokeModule
(LoginContext.java:528)
        at javax.security.auth.login.LoginContext.login(LoginContext.java:449)

----------------

Here's the client code:

public class TestLogin {
  private static final String ERROR_NULL_REMOTE = "Remote interface reference 
is null.  It must be created by calling one of the Home interface methods 
first.";
  private static final int MAX_OUTPUT_LINE_LENGTH = 100;
  private boolean logging = true;
  private LoginHome loginHome = null;
  private Login login = null;


  static class AppCallbackHandler implements CallbackHandler {
    private String username;
    private char[] password;

    public AppCallbackHandler(String username, char[] password) {
      this.username = username;
      this.password = password;
    }

    public void handle(Callback[] callbacks) throws
        java.io.IOException, UnsupportedCallbackException {

      for (int i = 0; i < callbacks.length; i++) {
        if (callbacks[i] instanceof NameCallback) {

          System.out.println("handle " + i + ": callbacks["+i+"] instanceof 
NameCallback");

          NameCallback nc = (NameCallback)callbacks[i];

          System.out.println("setting username to Carrier");
          nc.setName(username);
        }
        else if (callbacks[i] instanceof PasswordCallback) {
          System.out.println("handle " + i + ": callbacks["+i+"] instanceof 
PasswordCallback");

          PasswordCallback pc = (PasswordCallback)callbacks[i];

          System.out.println("setting username to Carrier");

          pc.setPassword(password);
        }
        else {
          System.out.println("handle: unrecognized callback " + callbacks
[i].getClass().getName());
          throw new UnsupportedCallbackException(callbacks[i], "Unrecognized 
Callback");
        }
      }
    }
  }

  /**Construct the EJB test client*/
  public TestLogin() {
    long startTime = 0;
    if (logging) {
      log("Initializing bean access.");
      startTime = System.currentTimeMillis();
    }

    try {

      AppCallbackHandler handler = new AppCallbackHandler
("Carrier", "Carrier".toCharArray());

      System.out.println("handler is " + handler);

      LoginContext lc = new LoginContext("Carrier", handler);
      System.out.println("Created LoginContext");
      lc.login();
/*
      String namingFactory = "org.jnp.interfaces.NamingContextFactory";
      String providerUrl = "jnp://mdcsandbox1:9901";
      String factoryUrl = "org.jboss.naming:org.jnp.interfaces";

      Hashtable props = new Hashtable();
      props.put(Context.INITIAL_CONTEXT_FACTORY, namingFactory);
      props.put(Context.PROVIDER_URL, providerUrl);
      props.put(Context.URL_PKG_PREFIXES, factoryUrl);

      //get naming context
      Context ctx = new InitialContext(props);
*/

      Context ctx = new InitialContext();

      //look up jndi name
      Object ref = ctx.lookup("Login");

      //cast to Home interface
      loginHome = (LoginHome) PortableRemoteObject.narrow(ref, LoginHome.class);
      if (logging) {
        long endTime = System.currentTimeMillis();
        log("Succeeded initializing bean access.");
        log("Execution time: " + (endTime - startTime) + " ms.");
      }
    }
    catch(Exception e) {
      if (logging) {
        log("Failed initializing bean access.");
      }
      e.printStackTrace();
    }
  }

  //----------------------------------------------------------------------------
  // Methods that use Home interface methods to generate a Remote interface 
reference
  //----------------------------------------------------------------------------

  public Login create() {
    long startTime = 0;
    if (logging) {
      log("Calling create()");
      startTime = System.currentTimeMillis();
    }
    try {
      login = loginHome.create();
      if (logging) {
        long endTime = System.currentTimeMillis();
        log("Succeeded: create()");
        log("Execution time: " + (endTime - startTime) + " ms.");
      }
    }
    catch(Exception e) {
      if (logging) {
        log("Failed: create()");
      }
      e.printStackTrace();
    }

    if (logging) {
      log("Return value from create(): " + login + ".");
    }
    return login;
  }

  public Login create(String user, String password) {
    long startTime = 0;
    if (logging) {
      log("Calling create(" + user + ", " + password + ")");
      startTime = System.currentTimeMillis();
    }
    try {
      login = loginHome.create(user, password);
      if (logging) {
        long endTime = System.currentTimeMillis();
        log("Succeeded: create(" + user + ", " + password + ")");
        log("Execution time: " + (endTime - startTime) + " ms.");
      }
    }
    catch(Exception e) {
      if (logging) {
        log("Failed: create(" + user + ", " + password + ")");
      }
      e.printStackTrace();
    }

    if (logging) {
      log("Return value from create(" + user + ", " + password + "): " + login 
+ ".");
    }
    return login;
  }

  //----------------------------------------------------------------------------
  // Methods that use Remote interface methods to access data through the bean
  //----------------------------------------------------------------------------

  public String validate() {
    String returnValue = "";
    if (login == null) {
      System.out.println("Error in validate(): " + ERROR_NULL_REMOTE);
      return returnValue;
    }
    long startTime = 0;
    if (logging) {
      log("Calling validate()");
      startTime = System.currentTimeMillis();
    }

    try {
      returnValue = login.validate();
      if (logging) {
        long endTime = System.currentTimeMillis();
        log("Succeeded: validate()");
        log("Execution time: " + (endTime - startTime) + " ms.");
      }
    }
    catch(Exception e) {
      if (logging) {
        log("Failed: validate()");
      }
      e.printStackTrace();
    }

    if (logging) {
      log("Return value from validate(): " + returnValue + ".");
    }
    return returnValue;
  }

  public void testRemoteCallsWithDefaultArguments() {
    if (login == null) {
      System.out.println("Error in testRemoteCallsWithDefaultArguments(): " + 
ERROR_NULL_REMOTE);
      return ;
    }
    validate();
  }

  //----------------------------------------------------------------------------
  // Utility Methods
  //----------------------------------------------------------------------------

  private void log(String message) {
    if (message == null) {
      System.out.println("-- null");
      return ;
    }
    if (message.length() > MAX_OUTPUT_LINE_LENGTH) {
      System.out.println("-- " + message.substring(0, MAX_OUTPUT_LINE_LENGTH) 
+ " ...");
    }
    else {
      System.out.println("-- " + message);
    }
  }
  /**Main method*/

  public static void main(String[] args) {
    TestLogin client = new TestLogin();
    // Use the client object to call one of the Home interface wrappers
    // above, to create a Remote interface reference to the bean.
    // If the return value is of the Remote interface type, you can use it
    // to access the remote interface methods.  You can also just use the
    // client object to call the Remote interface wrappers.
    try {
      client.create("Carrier", "Carrier");
      client.validate();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
}




Ed Brown


_________________________________________________________________________
This mail sent via toadmail.com, web e-mail @ ToadNet - want to go fast?
http://www.toadmail.com

_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to