# Login Modules in a Java Client Guide

The content of this guide is the following:

1. Configuring an environment to use login modules with java clients
2. Example of a client

## Configuring an environment to use login modules with java clients

The login modules for use by clients are defined in the file `$JONAS_ROOT/conf/jaas.config`. Example:

    jaasclient {
        // Login Module to use for the example jaasclient.

        //First, use a LoginModule for the authentication
        // Use the resource memrlm_1
        org.objectweb.jonas.security.auth.spi.JResourceLoginModule required
        resourceName="memrlm_1"
            ;

        // Use the login module to propagate security to the JOnAS server
        // globalCtx is set to true in order to set the security context
        // for all the threads of the client container instead of only
        // on the current thread.
        // Useful with multithread applications (like Swing Clients)
        org.objectweb.jonas.security.auth.spi.ClientLoginModule  required
        globalCtx="true"
            ;
    };

This file is used when a java client is launched with `jclient`, as a result of the following property being set by `jclient`: `-Djava.security.auth.login.config==$JONAS_ROOT/conf/jaas.config`
For more information about the JAAS authentication, refer to the JAAS authentication tutorial.

## Example of a client

- First, the CallbackHandler to use is declared. It can be a simple command line prompt, a dialog, or even a login/password to use.
  Example of CallbackHandler that can be used within JOnAS.

          CallbackHandler handler1 = new LoginCallbackHandler();
          CallbackHandler handler2 = new DialogCallbackHandler();
          CallbackHandler handler3 = new NoInputCallbackHandler("jonas_user", "jonas_password");

- Next, the LoginContext method with the previously defined CallbackHandler and the entry to use from the `JONAS_ROOT/conf/jaas.config` file is called.
  This example uses the dialog callbackhandler.

              LoginContext loginContext = new LoginContext("jaasclient", handler2);

- Finally, the login method on the LoginContext instance is called.

                  loginContext.login();

  If there are no exceptions, the authentication is successful.
  Authentication can fail if the supplied password is incorrect.