1 9 package org.jboss.portal.core.security.jaas; 10 11 import org.jboss.portal.common.util.Tools; 12 import org.jboss.portal.common.util.UUIDGenerator; 13 import org.jboss.security.auth.spi.UsernamePasswordLoginModule; 14 import org.jboss.security.SimpleGroup; 15 16 import java.util.Collections ; 17 import java.util.Map ; 18 import java.util.WeakHashMap ; 19 import java.io.Serializable ; 20 import java.security.acl.Group ; 21 22 import javax.security.auth.Subject ; 23 import javax.security.auth.callback.Callback ; 24 import javax.security.auth.callback.CallbackHandler ; 25 import javax.security.auth.callback.PasswordCallback ; 26 import javax.security.auth.callback.UnsupportedCallbackException ; 27 import javax.security.auth.login.LoginException ; 28 import javax.security.auth.login.FailedLoginException ; 29 import javax.security.auth.spi.LoginModule ; 30 31 import EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap; 32 33 42 public class IdentityPropagationLoginModule extends UsernamePasswordLoginModule 43 { 44 45 46 private static final Map knownIdentities = new ConcurrentHashMap(); 47 48 49 private static final UUIDGenerator generator = new UUIDGenerator(); 50 51 public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) 52 { 53 super.initialize(subject, callbackHandler, sharedState, options); 54 } 55 56 protected String getUsersPassword() throws LoginException 57 { 58 String userName = getUsername(); 59 String password = (String )knownIdentities.get(userName); 60 if (password == null) 61 { 62 throw new FailedLoginException ("No matching username found in Principals"); 63 } 64 return password; 65 } 66 67 protected Group[] getRoleSets() throws LoginException 68 { 69 try 70 { 71 Group rolesGroup = new SimpleGroup("Roles"); 72 73 rolesGroup.addMember(createIdentity("root")); 75 return new Group[]{rolesGroup}; 76 } 77 catch (Exception e) 78 { 79 throw new LoginException (e.toString()); 80 } 81 } 82 83 88 public static void propagate(String userName, Runnable runnable) 89 { 90 if (userName == null) 91 { 92 throw new IllegalArgumentException ("Null user name not accepted"); 93 } 94 if (runnable == null) 95 { 96 throw new IllegalArgumentException ("Runnable is null"); 97 } 98 final String password = Tools.md5AsHexString(generator.generateKey()); 99 try 100 { 101 knownIdentities.put(userName, password); 102 runnable.run(userName, password); 103 } 104 finally 105 { 106 knownIdentities.remove(userName); 107 } 108 } 109 110 public interface Runnable 111 { 112 void run(String userName, String password); 113 } 114 } 115 | Popular Tags |