1 17 package org.apache.geronimo.security.jaas; 18 19 import java.util.HashMap ; 20 import java.util.List ; 21 import java.util.Map ; 22 import java.util.Set ; 23 24 import org.apache.geronimo.gbean.GBeanInfo; 25 import org.apache.geronimo.gbean.GBeanInfoBuilder; 26 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; 27 import org.apache.geronimo.kernel.Kernel; 28 import org.apache.geronimo.system.serverinfo.ServerInfo; 29 import org.apache.geronimo.security.jaas.server.JaasLoginModuleConfiguration; 30 31 32 38 public class JaasLoginModuleUse implements JaasLoginModuleChain { 39 public final static String KERNEL_NAME_LM_OPTION = "org.apache.geronimo.security.realm.GenericSecurityRealm.KERNEL"; 41 public final static String SERVERINFO_LM_OPTION = "org.apache.geronimo.security.realm.GenericSecurityRealm.SERVERINFO"; 42 public final static String CLASSLOADER_LM_OPTION = "org.apache.geronimo.security.realm.GenericSecurityRealm.CLASSLOADER"; 43 44 private final LoginModuleSettings loginModule; 45 private final JaasLoginModuleUse next; 46 private LoginModuleControlFlag controlFlag; 47 private final Kernel kernel; 48 49 public JaasLoginModuleUse() { 51 loginModule = null; 52 next = null; 53 controlFlag = null; 54 kernel = null; 55 } 56 57 public JaasLoginModuleUse(LoginModuleSettings loginModule, JaasLoginModuleUse next, String controlFlag, Kernel kernel) { 58 this.loginModule = loginModule; 59 this.next = next; 60 LoginModuleControlFlagEditor editor = new LoginModuleControlFlagEditor(); 61 editor.setAsText(controlFlag); 62 this.controlFlag = (LoginModuleControlFlag) editor.getValue(); 63 this.kernel = kernel; 64 } 65 66 public LoginModuleSettings getLoginModule() { 67 return loginModule; 68 } 69 70 public JaasLoginModuleChain getNext() { 71 return next; 72 } 73 74 public String getLoginModuleName() { 75 return kernel.getAbstractNameFor(loginModule).toURI().toString(); 78 } 79 80 public String getNextName() { 81 if(next == null) { 82 return null; 83 } 84 return kernel.getAbstractNameFor(next).toURI().toString(); 87 } 88 89 public String getControlFlag() { 90 return controlFlag.toString(); 91 } 92 93 public void setControlFlag(String controlFlag) { 94 LoginModuleControlFlagEditor ed = new LoginModuleControlFlagEditor(); 95 ed.setAsText(controlFlag); 96 this.controlFlag = (LoginModuleControlFlag) ed.getValue(); 97 } 98 99 public void configure(Set domainNames, List loginModuleConfigurations, Kernel kernel, ServerInfo serverInfo, ClassLoader classLoader) { 100 Map options = loginModule.getOptions(); 101 if (options != null) { 102 options = new HashMap (options); 103 } else { 104 options = new HashMap (); 105 } 106 if (kernel != null && !options.containsKey(KERNEL_NAME_LM_OPTION)) { 107 options.put(KERNEL_NAME_LM_OPTION, kernel.getKernelName()); 108 } 109 if (serverInfo != null && !options.containsKey(SERVERINFO_LM_OPTION)) { 110 options.put(SERVERINFO_LM_OPTION, serverInfo); 111 } 112 if (classLoader != null && !options.containsKey(CLASSLOADER_LM_OPTION)) { 113 options.put(CLASSLOADER_LM_OPTION, classLoader); 114 } 115 if (loginModule.getLoginDomainName() != null) { 116 if (domainNames.contains(loginModule.getLoginDomainName())) { 117 throw new IllegalStateException ("Error in realm: one security realm cannot contain multiple login modules for the same login domain"); 118 } else { 119 domainNames.add(loginModule.getLoginDomainName()); 120 } 121 } 122 JaasLoginModuleConfiguration config = new JaasLoginModuleConfiguration(loginModule.getLoginModuleClass(), controlFlag, options, loginModule.isServerSide(), loginModule.getLoginDomainName(), loginModule.isWrapPrincipals(), loginModule.getClassLoader()); 123 loginModuleConfigurations.add(config); 124 125 if (next != null) { 126 next.configure(domainNames, loginModuleConfigurations, kernel, serverInfo, classLoader); 127 } 128 } 129 130 public static final GBeanInfo GBEAN_INFO; 131 132 static { 133 GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(JaasLoginModuleUse.class, "LoginModuleUse"); 134 infoBuilder.addAttribute("controlFlag", String .class, true); 135 infoBuilder.addAttribute("kernel", Kernel.class, false, false); 136 infoBuilder.addReference("LoginModule", LoginModuleSettings.class, NameFactory.LOGIN_MODULE); 137 infoBuilder.addReference("Next", JaasLoginModuleUse.class); 138 139 infoBuilder.addOperation("configure", new Class []{Set .class, List .class, Kernel.class, ServerInfo.class, ClassLoader .class}); 140 infoBuilder.addInterface(JaasLoginModuleChain.class); 141 infoBuilder.setConstructor(new String []{"LoginModule", "Next", "controlFlag", "kernel"}); 142 GBEAN_INFO = infoBuilder.getBeanInfo(); 143 } 144 145 public static GBeanInfo getGBeanInfo() { 146 return GBEAN_INFO; 147 } 148 } 149 | Popular Tags |