1 17 18 package org.apache.geronimo.connector.outbound.security; 19 20 import java.io.IOException ; 21 import java.util.Map ; 22 23 import javax.resource.spi.security.PasswordCredential ; 24 import javax.resource.spi.ManagedConnectionFactory ; 25 import javax.security.auth.Subject ; 26 import javax.security.auth.callback.Callback ; 27 import javax.security.auth.callback.CallbackHandler ; 28 import javax.security.auth.callback.NameCallback ; 29 import javax.security.auth.callback.PasswordCallback ; 30 import javax.security.auth.callback.UnsupportedCallbackException ; 31 import javax.security.auth.login.LoginException ; 32 import javax.security.auth.spi.LoginModule ; 33 34 40 public class CallerIdentityPasswordCredentialLoginModule implements LoginModule { 41 42 private Subject subject; 43 private CallbackHandler callbackHandler; 44 45 private ManagedConnectionFactory managedConnectionFactory; 46 47 private String resourcePrincipalName; 48 private String userName; 49 private char[] password; 50 51 public void initialize(Subject subject, CallbackHandler callbackHandler, 52 Map sharedState, Map options) { 53 this.subject = subject; 54 this.callbackHandler = callbackHandler; 55 managedConnectionFactory = (ManagedConnectionFactory ) options.get(PasswordCredentialLoginModuleWrapper.MANAGED_CONNECTION_FACTORY_OPTION); 56 if (managedConnectionFactory == null) { 57 throw new IllegalArgumentException ("No ManagedConnectionFactory supplied in options"); 58 } 59 } 60 61 public boolean login() throws LoginException { 62 if (managedConnectionFactory == null) { 63 return false; 64 } 65 Callback [] callbacks = new Callback [2]; 66 67 callbacks[0] = new NameCallback ("User name"); 68 callbacks[1] = new PasswordCallback ("Password", false); 69 try { 70 callbackHandler.handle(callbacks); 71 } catch (IOException ioe) { 72 throw (LoginException ) new LoginException ().initCause(ioe); 73 } catch (UnsupportedCallbackException uce) { 74 throw (LoginException ) new LoginException ().initCause(uce); 75 } 76 resourcePrincipalName = ((NameCallback ) callbacks[0]).getName(); 77 userName = ((NameCallback ) callbacks[0]).getName(); 78 password = ((PasswordCallback ) callbacks[1]).getPassword(); 79 return resourcePrincipalName != null && userName != null && password != null; 80 } 81 82 public boolean commit() throws LoginException { 83 subject.getPrincipals().add(new ResourcePrincipal(resourcePrincipalName)); 84 PasswordCredential passwordCredential = new PasswordCredential (userName, password); 85 passwordCredential.setManagedConnectionFactory(managedConnectionFactory); 86 subject.getPrivateCredentials().add(passwordCredential); 87 return true; 88 } 89 90 public boolean abort() throws LoginException { 91 subject = null; 92 userName = null; 93 password = null; 94 return true; 95 } 96 97 public boolean logout() throws LoginException { 98 subject = null; 99 userName = null; 100 password = null; 101 return true; 102 } 103 } 104 | Popular Tags |