1 28 package net.sf.jguard.ext.authentication.manager; 29 30 import java.security.NoSuchAlgorithmException ; 31 import java.util.ArrayList ; 32 import java.util.HashMap ; 33 import java.util.Iterator ; 34 import java.util.List ; 35 import java.util.Map ; 36 import java.util.logging.Level ; 37 import java.util.logging.Logger ; 38 39 import net.sf.jguard.core.CoreConstants; 40 import net.sf.jguard.core.authentication.configuration.ConfigurationHelper; 41 import net.sf.jguard.core.authentication.configuration.JGuardConfiguration; 42 import net.sf.jguard.ext.SecurityConstants; 43 import net.sf.jguard.ext.authentication.AuthenticationException; 44 import net.sf.jguard.ext.util.CryptUtils; 45 import net.sf.jguard.ext.util.XMLUtils; 46 47 import org.dom4j.Document; 48 import org.dom4j.Element; 49 50 56 public class AuthenticationHelper { 57 58 private static final Logger logger = Logger.getLogger(AuthenticationHelper.class.getName()); 59 60 61 68 public static AuthenticationManager initAuthentication(JGuardConfiguration jGuardConf,Map authenticationOptions, String applicationName) throws IllegalArgumentException { 69 70 boolean debugOnAuthentication = Boolean.valueOf((String )authenticationOptions.get(CoreConstants.DEBUG)).booleanValue(); 72 73 if (logger.isLoggable(Level.FINEST)) { 74 logger.log(Level.FINEST,"applicationName="+ applicationName); 75 logger.log(Level.FINEST,"authenticationOptions="+ authenticationOptions); 76 logger.log(Level.FINEST,"debugOnAuthentication="+ debugOnAuthentication); 77 } 78 79 initCryptOptions(authenticationOptions); 80 String scope = (String )authenticationOptions.get(SecurityConstants.SCOPE); 81 if(scope.equalsIgnoreCase(SecurityConstants.JVM_SCOPE)){ 82 boolean includeOldConfig = Boolean.valueOf((String )authenticationOptions.get(CoreConstants.INCLUDE_OLD_CONFIG)).booleanValue(); 83 boolean includeConfigFromJavaParam = new Boolean ((String )authenticationOptions.get(CoreConstants.INCLUDE_CONFIG_FROM_JAVA_PARAM)).booleanValue(); 84 ConfigurationHelper.installConfiguration(includeOldConfig, includeConfigFromJavaParam); 85 } 86 ConfigurationHelper.addConfigurationEntryForWebapp(jGuardConf,applicationName, authenticationOptions, debugOnAuthentication); 88 Map authManagerOptions = (Map )authenticationOptions.get(SecurityConstants.AUTHENTICATION_MANAGER_OPTIONS); 89 authManagerOptions.put(CoreConstants.APPLICATION_NAME, applicationName); 90 91 try { 92 AuthenticationManagerFactory.createAuthenticationManager((String )authenticationOptions.get(SecurityConstants.AUTHENTICATION_MANAGER), authManagerOptions); 93 } catch (AuthenticationException e) { 94 logger.log(Level.SEVERE,"authenticationManager initialization failed"); 95 } 96 97 return AuthenticationManagerFactory.getAuthenticationManager(); 98 } 99 100 101 private static void initCryptOptions(Map authenticationOptions) { 102 String salt = ((String )authenticationOptions.get(SecurityConstants.SALT)); 103 String digestAlgorithm = ((String )authenticationOptions.get(SecurityConstants.DIGEST_ALGORITHM)); 104 if(digestAlgorithm!= null && !"".equals(digestAlgorithm)){ 105 try { 106 CryptUtils.setDigestAlgorithm(digestAlgorithm); 107 } catch (NoSuchAlgorithmException e) { 108 logger.log(Level.SEVERE, e.getMessage()); 109 throw new IllegalArgumentException (e.getMessage()); 110 } 111 112 if( salt!=null && !salt.equals("")){ 113 boolean setSaltSuccess = CryptUtils.setSalt(salt.toCharArray()); 114 if(!setSaltSuccess){ 115 logger.log(Level.WARNING, " salt for message digest has not been set "); 116 } 117 } 118 } 119 } 120 121 122 128 public static Map loadConfiguration(String configurationLocation, String appHomePath){ 129 130 Document doc = XMLUtils.read(configurationLocation); 131 132 Element authentication = doc.getRootElement().element(SecurityConstants.AUTHENTICATION); 134 Map authenticationMap = new HashMap (); 135 authenticationMap.put(SecurityConstants.SCOPE, authentication.element(SecurityConstants.SCOPE).getTextTrim()); 136 authenticationMap.put(CoreConstants.DEBUG, authentication.element(CoreConstants.DEBUG).getTextTrim()); 137 authenticationMap.put(CoreConstants.INCLUDE_OLD_CONFIG, authentication.element(CoreConstants.INCLUDE_OLD_CONFIG).getTextTrim()); 138 authenticationMap.put(CoreConstants.INCLUDE_CONFIG_FROM_JAVA_PARAM, authentication.element(CoreConstants.INCLUDE_CONFIG_FROM_JAVA_PARAM).getTextTrim()); 139 authenticationMap.put(SecurityConstants.INCLUDE_POLICY_FROM_JAVA_PARAM, authentication.element(SecurityConstants.INCLUDE_POLICY_FROM_JAVA_PARAM).getTextTrim()); 140 if(authentication.element(SecurityConstants.DIGEST_ALGORITHM)!=null){ 141 authenticationMap.put(SecurityConstants.DIGEST_ALGORITHM,authentication.element(SecurityConstants.DIGEST_ALGORITHM).getTextTrim()); 142 } 143 if(authentication.element(SecurityConstants.SALT)!=null){ 144 authenticationMap.put(SecurityConstants.SALT,authentication.element(SecurityConstants.SALT).getTextTrim()); 145 } 146 List loginModuleElementsList = authentication.element(CoreConstants.LOGIN_MODULES).elements(SecurityConstants.LOGIN_MODULE); 148 List loginModules = new ArrayList (); 149 Iterator itLoginModuleElementsList = loginModuleElementsList.iterator(); 150 while(itLoginModuleElementsList.hasNext()){ 151 Element loginModule = (Element)itLoginModuleElementsList.next(); 152 153 Map loginModuleMap = new HashMap (); 154 loginModuleMap.put(CoreConstants.NAME,loginModule.element(CoreConstants.NAME).getTextTrim()); 155 loginModuleMap.put(CoreConstants.FLAG,loginModule.element(CoreConstants.FLAG).getTextTrim()); 156 Element loginModuleOpts = loginModule.element(CoreConstants.LOGIN_MODULE_OPTIONS); 157 if(loginModuleOpts!=null){ 158 List loginModuleOptsList = loginModuleOpts.elements(SecurityConstants.OPTION); 159 Iterator itLoginModuleOpts = loginModuleOptsList.iterator(); 160 Map loginModulesOptions = new HashMap (); 161 while (itLoginModuleOpts.hasNext()){ 162 Element option = (Element)itLoginModuleOpts.next(); 163 String name = option.element(CoreConstants.NAME).getTextTrim(); 164 String value = option.element(SecurityConstants.VALUE_MARKUP).getTextTrim(); 165 if(SecurityConstants.AUTHENTICATION_XML_FILE_LOCATION.equals(name)||SecurityConstants.AUTHENTICATION_DATABASE_FILE_LOCATION.equals(name)){ 166 value=appHomePath+value; 167 } 168 loginModulesOptions.put(name,value); 169 } 170 loginModuleMap.put(CoreConstants.LOGIN_MODULE_OPTIONS, loginModulesOptions); 171 }else{ 172 loginModuleMap.put(CoreConstants.LOGIN_MODULE_OPTIONS,new HashMap ()); 174 } 175 loginModules.add(loginModuleMap); 176 } 177 178 authenticationMap.put(CoreConstants.LOGIN_MODULES, loginModules); 179 180 authenticationMap.put(SecurityConstants.AUTHENTICATION_MANAGER, authentication.element(SecurityConstants.AUTHENTICATION_MANAGER).getTextTrim()); 182 183 Map authenticationManagerOptions = new HashMap (); 184 Element authentManagerOptsElement = authentication.element(SecurityConstants.AUTHENTICATION_MANAGER_OPTIONS); 185 List authentManagerOptsList = authentManagerOptsElement.elements(SecurityConstants.OPTION); 186 Iterator authentManagerOpts = authentManagerOptsList.iterator(); 187 while (authentManagerOpts.hasNext()){ 188 Element option = (Element)authentManagerOpts.next(); 189 String name = option.element(CoreConstants.NAME).getTextTrim(); 190 String value = option.element(SecurityConstants.VALUE_MARKUP).getTextTrim(); 191 if(SecurityConstants.AUTHENTICATION_XML_FILE_LOCATION.equals(name)||SecurityConstants.AUTHENTICATION_DATABASE_FILE_LOCATION.equals(name)){ 192 value=appHomePath+value; 193 } 194 authenticationManagerOptions.put(name,value); 195 } 196 197 authenticationMap.put(SecurityConstants.AUTHENTICATION_MANAGER_OPTIONS, authenticationManagerOptions); 198 199 return authenticationMap; 200 } 201 } 202 | Popular Tags |