"principal=null" after successeful authorization in Database
rsolod Jan 21, 2002 1:21 PMThe problem is : the DatabaseServerLoginModule configured and works. I'm login on server from MBean successfully using org.jboss.security.ClientLoginModule.
BUT during call of ejb-create from this MBean the exception occur:
Received throwable with Message: checkSecurityAssociation; nested exception is:
java.lang.SecurityException: Authentication exception, principal=null
java.rmi.RemoteException: checkSecurityAssociation; nested exception is:
java.lang.SecurityException: Authentication exception, principal=null
java.lang.SecurityException: Authentication exception, principal=null
at org.jboss.ejb.plugins.SecurityInterceptor.checkSecurityAssociation(SecurityInterceptor.java:213)
at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:144)
at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:106)
at org.jboss.ejb.StatelessSessionContainer.invokeHome(StatelessSessionContainer.java:253)
at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome(JRMPContainerInvoker.java:436)
at org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invoke(HomeProxy.java:212)
at $Proxy43.create(Unknown Source)
at ua.kiev.softline.forex.quotation.startup.QuoteService.start(QuoteService.java:70)
what's wrong?
The login performed by CallbackHandler from "HOW-TO" like this:
public void loginUser(String userName, String password)throws RealmException{
try {
CallbackHandlerImpl handler = new CallbackHandlerImpl(userName, password);
LoginContext lc = new LoginContext("client-login", handler);
lc.login();
} catch (LoginException e) {
Debug.println(e.getLocalizedMessage());
Debug.print(e);
throw new RealmException(RealmException.AUTHENTICATION_FAILED);
}
}
private class CallbackHandlerImpl implements CallbackHandler{
private String login= null;
private String password = null;
protected CallbackHandlerImpl(String login, String password){
this.login= login;
this.password = password;
}
public void handle(Callback[] callbacks) throws
java.io.IOException, UnsupportedCallbackException{
for (int i = 0; i < callbacks.length; i++){
if (callbacks instanceof NameCallback){
NameCallback nc = (NameCallback)callbacks;
nc.setName(login);
}else if (callbacks instanceof PasswordCallback){
PasswordCallback pc = (PasswordCallback)callbacks;
pc.setPassword(password.toCharArray());
}else{
throw new UnsupportedCallbackException(callbacks, "Unrecognized Callback");
}
}
}
}
the auth.conf is:
simple {
// Very simple login module:
// any user name is accepted.
// password should either coincide with user name or be null,
// all users have role "guest",
// users with non-null password also have role "user"
org.jboss.security.auth.spi.SimpleServerLoginModule required;
};
// Used by clients within the application server VM such as
// mbeans and servlets that access EJBs.
client-login {
org.jboss.security.ClientLoginModule required;
};
// The default server login module
forexsecurity{
org.jboss.security.auth.spi.DatabaseServerLoginModule required
dsJndiName="java:/forexDB"
principalsQuery="SELECT PASSWORD FROM AD_SYSUSER WHERE USERNAME = ?"
rolesQuery="SELECT role.code, 'Roles' FROM ad_SYSUSER sys, CD_SUBJROLE sr, CD_GRANDOBJECT role WHERE sys.PERSON_ID = sr.subject AND sr.role = role.id AND sys.USERNAME=?"
;
};