JBoss 3.2.3 / JAAS / DatabaseServerLoginModule
___martin___ Jun 5, 2004 7:08 PMHallo List!
I'd like to set up some security using JAAS and the DatabaseServerLoginModule for a small demo-application. In contrast to others on this forum, I'd like to access the EJBs not via JSPs but solely by a standalone client with GUI.
The problem is, that I get the following exception when my client application tries to call the login() method of the loginContext:
javax.naming.NameNotFoundException: DefaultDS not bound
The client application is startet with:
java -classpath $CLASSPATH:$JBOSS_JAR_HOME:jndi/
-Djava.security.manager -Djava.security.policy=com/ejbemarketplace/clients/ejbemarketplace.policy -Djava.security.auth.login.config=com/ejbemarketplace/clients/ejbemarketplace.conf -Dlogin.configuration.provider=org.jboss.security.auth.login.XMLLoginConfig com/ejbemarketplace/clients/MDIApplication
where JBOSS_JAR_HOME contains all files in /usr/local/jboss-3.2.3/client/ and in addition the file /usr/local/jboss-3.2.3/server/default/lib/jbosssx.jar.
As far as I could figure out the client application hasn't sent any data to the JBoss server at this point.
It would be very kind, if someone could give me a hint where I've made mistakes.
ng, martin
Subsequently I'll give you snipplets of source-files and the configuration-files in use:
ejbemarketplace.policy:
grant {
permission java.security.AllPermission;
};
ejbemarketplace.conf:
ejbemarketplace {
org.jboss.security.auth.spi.DatabaseServerLoginModule required;
};
jndi.properties:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost
The code used in the client application MDIApplication:
private void jIFAuthenticateOKButtonActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
try {
eMarketCallbackHandler emch = new eMarketCallbackHandler(jFormattedTextField3.getText(), jPasswordField1.getPassword());
System.out.println("----- eMarketCallbackHandler emch created! ----");
LoginContext loginContext = new LoginContext("ejbemarketplace", emch);
System.out.println("----- LoginContext created ----");
loginContext.login();
System.out.println("----- login accomplished ----");
Subject subject = loginContext.getSubject();
System.out.println("----- got subject ----");
} catch (javax.security.auth.login.LoginException le) {
System.out.println("MDIApplication: jIFAuthenticateOKButtonActionPerformed(ActionEvent) le - " + //
le.getMessage());
}
}
eMarketCallbackHandler.java:
package com.ejbemarketplace.callbackhandler;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
public class eMarketCallbackHandler implements javax.security.auth.callback.CallbackHandler {
private String username;
private char[] password;
public eMarketCallbackHandler(String username, char[] password) {
this.username = username;
this.password = password;
}
public eMarketCallbackHandler(String username, String password) {
this.username = username;
this.password = password.toCharArray();
}
public void handle(Callback[] callback)
throws java.io.IOException, UnsupportedCallbackException {
for (int i = 0; i < callback.length; i++) {
if (callback instanceof NameCallback) {
NameCallback nc = (NameCallback) callback;
nc.setName(username);
} else if (callback instanceof PasswordCallback) {
PasswordCallback pc = (PasswordCallback) callback;
pc.setPassword(password);
} else {
throw new UnsupportedCallbackException(callback, "Unrecognized Callback");
}
}
}
}
At the server-side:
login-config.xml
<application-policy name = "ejbemarketplace"> <authentication> <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" flag = "required"> <module-option name = "dsJndiName">java:/PostgresDS</module-option> <!-- <module-option name = "dsJndiName">PostgreSQL</module-option> --> <module-option name = "principalsQuery"> select passwd from customerejb where ucid=? </module-option> <module-option name= "rolesQuery"> select userRoles,'Roles' from customerejb where ucid=? </module-option> </login-module> </authentication> </application-policy>
jboss.xml:
: <container-configurations> <security-domain>java:/jaas/ejbemarketplace</security-domain> </container-configurations> :
The database in use is PostgresSQL. The database worked correctly before I tried to fiddle about with JAAS.
jbosscmp-jdbc.xml:
: <defaults> <datasource>java:/PostgresDS</datasource> <datasource-mapping>PostgreSQL</datasource-mapping> <create-table>true</create-table> <remove-table>false</remove-table> </defaults> :
ps: sorry for grammar or spelling mistakes.