import javax.security.auth.Subject;
import javax.security.auth.callback.*;
import javax.security.auth.login.*;
import com.sun.security.auth.callback.TextCallbackHandler;
import java.security.PrivilegedAction;

/**
 * This JaasAzn application attempts to authenticate a user
 * and reports whether or not the authentication was successful.
 * If successful, it then sets up subsequent execution of
 * code in the run method of the SampleAction class such that
 * access control checks for security-sensitive operations will be
 * based on the user running the code.
 */
public class JaasAzn {

    public static void main(String[] args) {

	// Obtain a LoginContext, needed for authentication. Tell it 
	// to use the LoginModule implementation specified by the 
	// entry named "JaasSample" in the JAAS login configuration 
	// file and to also use the specified CallbackHandler.
	LoginContext lc = null;
	try {
	    lc = new LoginContext("JaasSample", new TextCallbackHandler());
	} catch (LoginException le) {
	    System.err.println("Cannot create LoginContext. "
	        + le.getMessage());
	    System.exit(-1);
	} catch (SecurityException se) {
	    System.err.println("Cannot create LoginContext. "
	        + se.getMessage());
	    System.exit(-1);
	} 

	try {

	    // attempt authentication
	    lc.login();

	} catch (LoginException le) {

	    System.err.println("Authentication failed:");
	    System.err.println("  " + le.getMessage());
	    System.exit(-1);

	}

	System.out.println("Authentication succeeded!");

	// now try to execute the SampleAction as the authenticated Subject
	Subject mySubject = lc.getSubject();
	PrivilegedAction action = new SampleAction();
	Subject.doAsPrivileged(mySubject, action, null);

    }
}


