クラス org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer

org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServerに対する継承グラフ

Inheritance graph
[凡例]
org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServerのコラボレーション図

Collaboration graph
[凡例]
すべてのメンバ一覧

説明

An MBeanServer authenticating all invoke() requests.

作者:
Marc Wick

Nicolas Modrzyk

バージョン:
1.0

AuthenticatingMBeanServer.java51 行で定義されています。

Public メソッド

void setMBeanServer (MBeanServer server)
Object invoke (ObjectName name, String operationName, Object[] params, String[] signature) throws InstanceNotFoundException, MBeanException, ReflectionException

スタティック変数

Trace logger

Private メソッド

boolean authenticate (ObjectName name, String username, String password)

Static Private メソッド

Object[] cleanO (Object[] params)
String[] cleanS (String[] params)


メソッド

boolean org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.authenticate ObjectName  name,
String  username,
String  password
[private]
 

AuthenticatingMBeanServer.java145 行で定義されています。

参照先 org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.invoke(), と org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.logger.

参照元 org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.invoke().

00146 { 00147 try 00148 { 00149 boolean vdb = name.toString().indexOf( 00150 JmxConstants.CJDBC_TYPE_VIRTUALDATABASE) != -1; 00151 if (vdb) 00152 return ((Boolean) invoke(name, "checkAdminAuthentication", 00153 new Object[]{username, password}, new String[]{"java.lang.String", 00154 "java.lang.String"})).booleanValue(); 00155 else 00156 { 00157 boolean backend = name.toString().indexOf( 00158 JmxConstants.CJDBC_TYPE_BACKEND) != -1; 00159 if (backend) 00160 { 00161 // Check with the owning database if the password is right 00162 ObjectName vdbName = JmxConstants 00163 .getVirtualDbObjectNameFromBackend(name); 00164 return ((Boolean) invoke(vdbName, "checkAdminAuthentication", 00165 new Object[]{username, password}, new String[]{ 00166 "java.lang.String", "java.lang.String"})).booleanValue(); 00167 } 00168 else 00169 // No further check ... 00170 return true; 00171 } 00172 } 00173 catch (Exception e) 00174 { 00175 if (logger.isDebugEnabled()) 00176 { 00177 logger.debug("authentication failed with exception ", e); 00178 } 00179 return false; 00180 } 00181 }

Object [] org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.cleanO Object[]  params  )  [static, private]
 

AuthenticatingMBeanServer.java183 行で定義されています。

参照元 org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.invoke().

00184 { 00185 List o = Arrays.asList(params); 00186 o = o.subList(2, o.size()); 00187 return (new ArrayList(o).toArray()); 00188 }

String [] org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.cleanS String[]  params  )  [static, private]
 

AuthenticatingMBeanServer.java190 行で定義されています。

参照元 org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.invoke().

00191 { 00192 List o = Arrays.asList(params); 00193 o = o.subList(2, o.size()); 00194 String[] s = new String[o.size()]; 00195 return (String[]) new ArrayList(o).toArray(s); 00196 }

Object org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.invoke ObjectName  name,
String  operationName,
Object[]  params,
String[]  signature
throws InstanceNotFoundException, MBeanException, ReflectionException
 

参照:
javax.management.MBeanServerConnection#invoke(javax.management.ObjectName, java.lang.String, java.lang.Object[], java.lang.String[])

org.objectweb.cjdbc.controller.jmx.ChainedMBeanServerを再定義しています。

AuthenticatingMBeanServer.java73 行で定義されています。

参照先 org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.authenticate(), org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.cleanO(), org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.cleanS(), org.objectweb.cjdbc.common.users.AbstractDatabaseUser.getName(), org.objectweb.cjdbc.common.users.AbstractDatabaseUser.getPassword(), と org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.logger.

参照元 org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.authenticate().

00076 { 00077 00078 boolean mbeanNeedAuthentication = name.toString().indexOf( 00079 JmxConstants.CJDBC_TYPE_VIRTUALDATABASE) != -1 00080 || name.toString().indexOf(JmxConstants.CJDBC_TYPE_BACKEND) != -1; 00081 if (mbeanNeedAuthentication 00082 && (operationName.equalsIgnoreCase("checkAdminAuthentication") == false)) 00083 { 00084 // we have to check all methods that access a virtual database 00085 // except 00086 // authentication 00087 boolean authenticationOk = false; 00088 String username = null; 00089 String password = null; 00090 00091 Subject subject = Subject.getSubject(java.security.AccessController 00092 .getContext()); 00093 if (subject == null || subject.getPrincipals().size() == 0) 00094 { 00095 username = (String) params[0]; 00096 password = (String) params[1]; 00097 authenticationOk = authenticate(name, username, password); 00098 if (!authenticationOk) 00099 throw new MBeanException(new Exception( 00100 "Authentication failed (username,password) invalid")); 00101 00102 if (logger.isDebugEnabled()) 00103 logger 00104 .debug("Authentication with username and password was successfull"); 00105 00106 // we have to strip the username and password from the params 00107 // and args 00108 return super.invoke(name, operationName, cleanO(params), 00109 cleanS(signature)); 00110 } 00111 else 00112 { 00113 Set principals = subject.getPrincipals(AbstractDatabaseUser.class); 00114 for (Iterator it = principals.iterator(); it.hasNext();) 00115 { 00116 AbstractDatabaseUser user = (AbstractDatabaseUser) it.next(); 00117 username = user.getName(); 00118 password = user.getPassword(); 00119 authenticationOk = authenticate(name, username, password); 00120 if (authenticationOk) 00121 break; 00122 } 00123 00124 if (principals.size() == 0 && logger.isDebugEnabled()) 00125 throw new MBeanException(new Exception( 00126 "Authentication failed : no principal")); 00127 00128 if (!authenticationOk) 00129 throw new MBeanException(new Exception( 00130 "Authentication failed : principal invalid")); 00131 if (logger.isDebugEnabled()) 00132 logger.debug("Authentication with principal was successfull"); 00133 return super.invoke(name, operationName, params, signature); 00134 } 00135 } 00136 else 00137 { 00138 if (logger.isDebugEnabled()) 00139 logger.debug("no authentication required"); 00140 00141 return super.invoke(name, operationName, params, signature); 00142 } 00143 }

void org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.setMBeanServer MBeanServer  server  ) 
 

Overridden just to make it public

参照:
org.objectweb.cjdbc.controller.jmx.ChainedMBeanServer.setMBeanServer(javax.management.MBeanServer)

org.objectweb.cjdbc.controller.jmx.ChainedMBeanServerを再定義しています。

AuthenticatingMBeanServer.java64 行で定義されています。

00065 { 00066 super.setMBeanServer(server); 00067 }


変数

Trace org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.logger [static, package]
 

初期値:

Trace .getLogger("org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer")
Logger instance AuthenticatingMBeanServer.java55 行で定義されています。

参照元 org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.authenticate(), と org.objectweb.cjdbc.controller.jmx.AuthenticatingMBeanServer.invoke().


このクラスの説明は次のファイルから生成されました:
CJDBCversion1.0.4に対してTue Oct 12 15:16:42 2004に生成されました。 doxygen 1.3.8