1 28 package net.sf.jguard.ext.java5.authentication.jmx; 29 30 import java.security.Principal ; 31 import java.util.Iterator ; 32 import java.util.Set ; 33 import java.util.logging.Level ; 34 import java.util.logging.Logger ; 35 36 import javax.management.remote.JMXAuthenticator ; 37 import javax.security.auth.Subject ; 38 import javax.security.auth.login.Configuration ; 39 import javax.security.auth.login.LoginContext ; 40 import javax.security.auth.login.LoginException ; 41 42 import net.sf.jguard.core.CoreConstants; 43 import net.sf.jguard.core.authentication.configuration.LocalLoginContext; 44 import net.sf.jguard.core.principals.JMXPrincipal; 45 import net.sf.jguard.core.principals.UserPrincipal; 46 import net.sf.jguard.ext.SecurityConstants; 47 import net.sf.jguard.ext.authentication.callbacks.JMXCallbackHandler; 48 49 59 public class JGuardJMXAuthenticator implements JMXAuthenticator { 60 61 private static final Logger logger = Logger.getLogger(JGuardJMXAuthenticator.class.getName()); 62 63 private String applicationName; 64 private ClassLoader classLoader; private Configuration configuration = null; 66 67 75 public JGuardJMXAuthenticator(){ 76 77 logger.info("JGuardJMXAuthentication for j2se environnement"); 78 String appNameProp = System.getProperty(SecurityConstants.JGUARD_APPLICATION_NAME); 79 80 if (appNameProp != null){ 81 applicationName = appNameProp; 83 }else{ 84 String appNameJMXProp = System.getProperty(SecurityConstants.COM_SUN_APPLICATION_NAME); 85 if (appNameJMXProp != null){ 86 applicationName = appNameJMXProp; 87 }else{ 88 applicationName = CoreConstants.DEFAULT_APPLICATION_NAME; 90 } 91 } 92 this.classLoader = null; } 94 95 100 public JGuardJMXAuthenticator(String applicationName,ClassLoader classLoader){ 101 logger.info("JGuardJMXAuthentication for jee environnement"); 102 this.applicationName = applicationName; 103 this.classLoader = classLoader; 104 } 105 106 107 108 public JGuardJMXAuthenticator(String appName, ClassLoader contextClassLoader, Configuration conf) { 109 logger.info("JGuardJMXAuthentication for jee environnement"); 110 logger.info("authentication scope is local"); 111 this.applicationName = appName; 112 this.classLoader = contextClassLoader; 113 configuration = conf; 114 } 115 116 public Subject authenticate(Object credentials) { 117 118 Subject subject = null; 119 120 if(configuration==null){ 121 try { 122 logger.info("logging in application : " + applicationName); 123 LoginContext lc = new LoginContext (applicationName, new JMXCallbackHandler(credentials)); 124 lc.login(); 125 subject = lc.getSubject(); 126 } catch (LoginException e) { 127 logger.severe("loginException : "+e.getMessage()); 128 throw new SecurityException (e.getMessage()); 129 } 130 }else{ 131 try { 133 LocalLoginContext loginContext = new LocalLoginContext(applicationName,new JMXCallbackHandler(credentials),configuration); 134 loginContext.login(); 135 subject = loginContext.getSubject(); 136 } catch (LoginException e) { 137 logger.severe("loginException : "+e.getMessage()); 138 throw new SecurityException (e.getMessage()); 139 } 140 } 141 142 143 if (this.classLoader != null){ 144 JMXPrincipal classLoaderPrincipal = new JMXPrincipal(applicationName, this.classLoader); 146 subject.getPrincipals().add(classLoaderPrincipal); 147 } 148 149 subject.getPrincipals().add(new UserPrincipal(subject)); 151 152 if (logger.isLoggable(Level.INFO)){ 153 logger.info("Principals set during login :"); 154 Set ppals = subject.getPrincipals(); 155 Iterator itPpals = ppals.iterator(); 156 157 while (itPpals.hasNext()){ 158 Principal ppal = (Principal )itPpals.next(); 159 logger.log(Level.INFO, ppal.toString()); 160 } 161 } 162 163 return subject; 164 } 165 } 166 | Popular Tags |