00001 package net.threebit.utils.sosc;
00002
00003 import javax.security.auth.*;
00004 import javax.security.auth.callback.*;
00005 import javax.security.auth.login.*;
00006 import org.jboss.security.auth.callback.SecurityAssociationCallback;
00007 import org.jboss.security.SimplePrincipal;
00008
00013 public class CustomCallbackHandler implements CallbackHandler {
00014
00015 private String userName = null;
00016 private String password = null;
00017
00021 public CustomCallbackHandler (String userName, String password) {
00022 this.userName = userName;
00023 this.password = password;
00024 }
00025
00029 public void handle (Callback[] callbacks) {
00030
00031 for (int i = 0; i < callbacks.length; i++) {
00032
00033 if (callbacks[i] instanceof TextOutputCallback) {
00034
00035
00036 TextOutputCallback toc = (TextOutputCallback)callbacks[i];
00037 switch (toc.getMessageType()) {
00038 case TextOutputCallback.INFORMATION:
00039 System.out.println(toc.getMessage());
00040 break;
00041 case TextOutputCallback.ERROR:
00042 System.out.println("ERROR: " + toc.getMessage());
00043 break;
00044 case TextOutputCallback.WARNING:
00045 System.out.println("WARNING: " + toc.getMessage());
00046 break;
00047 default:
00048 throw new RuntimeException("Unsupported message type: " + toc.getMessageType());
00049 }
00050
00051 } else if (callbacks[i] instanceof NameCallback) {
00052
00053 NameCallback nc = (NameCallback) callbacks[i];
00054 nc.setName(userName);
00055
00056 } else if (callbacks[i] instanceof PasswordCallback) {
00057
00058 PasswordCallback pc = (PasswordCallback)callbacks[i];
00059 pc.setPassword(password.toCharArray());
00060
00061 } else if (callbacks[i] instanceof SecurityAssociationCallback) {
00062
00063 SecurityAssociationCallback sac = (SecurityAssociationCallback) callbacks[i];
00064 sac.setPrincipal( new SimplePrincipal( userName ));
00065 sac.setCredential( password );
00066
00067 } else {
00068 throw new RuntimeException("Unrecognized Callback: " + callbacks[i]);
00069 }
00070 }
00071 }
00072
00073 }