import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

public class KrbTester {
 public static void main(String[] args) {
   String userName = args[0];
   char[] password = args[1].toCharArray();

   try {
     LoginContext lc = new LoginContext("PipelineLogin", new UserNamePasswordCallbackHandler(userName, password));
     lc.login();
     System.out.println("KerberosAuth.main: " + lc.getSubject());
   }
   catch (LoginException le) {
     le.printStackTrace();
   }
 }

 public static class UserNamePasswordCallbackHandler implements CallbackHandler {
   private String _userName;
   private char[] _password;

   public UserNamePasswordCallbackHandler(String userName, char[] password) {
     _userName = userName;
     _password = password;
   }

   public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
     for (Callback callback : callbacks) {
       if (callback instanceof NameCallback && _userName != null) {
         ((NameCallback) callback).setName(_userName);
       }
       else if (callback instanceof PasswordCallback && _password != null) {
         ((PasswordCallback) callback).setPassword(_password);
       }
     }
   }
 }
}
