1 28 package net.sf.jguard.core.authentication.configuration; 29 30 import java.util.ArrayList ; 31 import java.util.Iterator ; 32 import java.util.List ; 33 import java.util.Map ; 34 import java.util.logging.Level ; 35 import java.util.logging.Logger ; 36 37 import javax.security.auth.login.AppConfigurationEntry ; 38 import javax.security.auth.login.Configuration ; 39 40 import net.sf.jguard.core.CoreConstants; 41 42 43 47 public class ConfigurationHelper { 48 49 private static String scope; 50 51 52 private static boolean configurationInstalled = false; 53 private static Logger logger = Logger.getLogger(ConfigurationHelper.class.getName()); 54 private final static String COM_SUN_SECURITY_AUTH_LOGIN_CONFIG_FILE = "com.sun.security.auth.login.ConfigFile"; 55 56 62 public static void addConfigurationEntryForWebapp(JGuardConfiguration configuration,String applicationName,Map authenticationSettings,boolean debug){ 63 List webappEntries = buildAppConfigurationEntries(applicationName,authenticationSettings,debug); 64 configuration.addConfigEntriesForApplication(applicationName,webappEntries); 65 } 66 67 68 74 public static void installConfiguration(boolean includeOldConfiguration,boolean includeConfigFromJavaParam) throws RuntimeException { 75 if(!configurationInstalled){ 76 includeConfigFromJavaParam = false; 77 } 78 JGuardConfiguration jGuardConf = installWithOldConfig(includeOldConfiguration); 79 80 if(includeConfigFromJavaParam){ 81 try { 83 Class defaultConfigClass = Class.forName(ConfigurationHelper.COM_SUN_SECURITY_AUTH_LOGIN_CONFIG_FILE); 84 Configuration defaultConfiguration = (Configuration ) defaultConfigClass.newInstance(); 85 jGuardConf.includeConfiguration(defaultConfiguration); 86 } catch (ClassNotFoundException e) { 87 logger.log(Level.SEVERE,ConfigurationHelper.COM_SUN_SECURITY_AUTH_LOGIN_CONFIG_FILE+" class cannot be found "+e.getMessage()); 88 } catch (InstantiationException e) { 89 logger.log(Level.SEVERE,ConfigurationHelper.COM_SUN_SECURITY_AUTH_LOGIN_CONFIG_FILE+" class cannot be instantiated "+e.getMessage()); 90 } catch (IllegalAccessException e) { 91 logger.log(Level.SEVERE,ConfigurationHelper.COM_SUN_SECURITY_AUTH_LOGIN_CONFIG_FILE+" class cannot be accessed "+e.getMessage()); 92 } 93 94 } 95 96 } 97 98 99 105 private static JGuardConfiguration installWithOldConfig(boolean includeOldConfiguration) throws RuntimeException { 106 JGuardConfiguration jGuardConf; 107 Configuration oldConfiguration = null; 108 boolean skipOldConfig = false; 109 try{ 110 oldConfiguration = Configuration.getConfiguration(); 111 logger.log(Level.FINE," oldConfiguration="+oldConfiguration.getClass().getName()); 112 logger.log(Level.FINE," oldConfiguration="+oldConfiguration); 113 114 }catch(SecurityException sex){ 115 skipOldConfig = true; 116 logger.log(Level.FINE," addConfigurationEntryForWebapp() - exception raised when we try to retrieve the default Configuration instance "); 117 logger.log(Level.FINE," addConfigurationEntryForWebapp() - "+ sex.getMessage()); 118 logger.log(Level.FINE," jGuard will not include the old Configuration "); 119 }catch(NullPointerException npe){ 120 skipOldConfig = true; 121 logger.log(Level.FINE,"addConfigurationEntryForWebapp() - a NullPointerException has been raised when the default configuration :no configuration is defined "); 122 logger.log(Level.FINE,"addConfigurationEntryForWebapp() - "+ npe.getMessage()); 123 } 124 125 if(oldConfiguration== null || 128 (!oldConfiguration.getClass().getName().equals(JGuardConfiguration.class.getName()))){ 129 jGuardConf = new JGuardConfiguration(); 130 Configuration.setConfiguration(jGuardConf); 131 logger.log(Level.INFO," JGuardConfiguration is set "); 132 }else if(!oldConfiguration.getClass().equals(JGuardConfiguration.class) 134 && oldConfiguration.getClass().getName().equals(JGuardConfiguration.class.getName())){ 135 logger.log(Level.SEVERE," jGuard_jvm must be placed under the shared libraries directory or on the jvm side, not in the WEB-INF/lib directory of the webapp "); 136 throw new RuntimeException (" jGuard_jvm must be placed under the shared libraries directory or on the jvm side, not in the WEB-INF/lib directory of the webapp "); 137 }else{ 138 jGuardConf = (JGuardConfiguration) Configuration.getConfiguration(); 139 logger.log(Level.FINE,"configuration="+oldConfiguration.getClass().getName()); 140 logger.log(Level.FINE," JGuardConfiguration is already set "); 141 skipOldConfig = true; 144 } 145 146 if(!skipOldConfig && includeOldConfiguration == true){ 148 logger.log(Level.INFO," jGuard include the old Configuration "); 149 jGuardConf.includeConfiguration(oldConfiguration); 150 } 151 152 configurationInstalled = true; 154 return jGuardConf; 155 } 156 157 158 165 private static List buildAppConfigurationEntries(String applicationName,Map authSettings,boolean debug) { 166 List appConfigurationEntryList = new ArrayList (); 167 168 List loginModules = (List )authSettings.get(CoreConstants.LOGIN_MODULES); 169 Iterator itLoginModules = loginModules.iterator(); 170 while(itLoginModules.hasNext()){ 171 Map loginModuleMap = (Map )itLoginModules.next(); 172 String loginModuleClassName = (String )loginModuleMap.get(CoreConstants.NAME); 173 String loginModuleFlag = (String )loginModuleMap.get(CoreConstants.FLAG); 174 AppConfigurationEntry.LoginModuleControlFlag controlFlag; 175 if(loginModuleFlag.equalsIgnoreCase(CoreConstants.REQUIRED)){ 176 controlFlag = AppConfigurationEntry.LoginModuleControlFlag.REQUIRED; 177 }else if(loginModuleFlag.equalsIgnoreCase(CoreConstants.OPTIONAL)){ 178 controlFlag = AppConfigurationEntry.LoginModuleControlFlag.OPTIONAL; 179 }else if(loginModuleFlag.equalsIgnoreCase(CoreConstants.REQUISITE)){ 180 controlFlag = AppConfigurationEntry.LoginModuleControlFlag.REQUISITE; 181 }else if(loginModuleFlag.equalsIgnoreCase(CoreConstants.SUFFICIENT)){ 182 controlFlag = AppConfigurationEntry.LoginModuleControlFlag.SUFFICIENT; 183 }else{ 184 throw new IllegalArgumentException (" invalid loginModuleControlFlag ="+loginModuleFlag+" is neither OPTIONAL,REQUIRED,REQUISITE nor SUFFICIENT "); 185 } 186 Map loginModuleOptions = (Map )loginModuleMap.get(CoreConstants.LOGIN_MODULE_OPTIONS); 187 loginModuleOptions.put(CoreConstants.APPLICATION_NAME,applicationName); 188 AppConfigurationEntry entry = new AppConfigurationEntry (loginModuleClassName,controlFlag,loginModuleOptions); 189 appConfigurationEntryList.add(entry); 190 } 191 if(appConfigurationEntryList.size()==0){ 192 throw new IllegalArgumentException (" no loginModules have been configured for the application="+applicationName); 193 } 194 return appConfigurationEntryList; 195 } 196 197 198 public static String getScope() { 199 return scope; 200 } 201 202 203 204 } 205 | Popular Tags |