I am trying to implement my own JAAS LoginModule.

I configure server.xml
<Realm className="org.apache.catalina.realm.JAASRealm"
                 debug="99" 
                 appName="NadejJAAS" 
                 userClassName="com.micropole.jaas.memory.UserPrincipal"
                 roleClassName="com.micropole.jaas.memory.RolePrincipal"
                 />
                 
My LoginModule works fine until i need to populate Principal in the commit()
method.

Kind of result:

                [MemoryLoginModule] user entered user name: testUser
                [MemoryLoginModule] user entered password: testPassword
                [MemoryLoginModule] authentication succeeded

And finnaly i get a 403 : forbidden access to ressource ....

I find an explication in the following method of RealmBase.hasRole(Principal
principal, String role) 

In fact, i populate with my own Principal (RolePrincipal) but
Tomcat rejects my user because it is waiting for a GenericPrincipal.
 
JAASRealm seems to use public boolean hasRole(Principal principal, String
role) 
inherited from RealmBase with the following code :

public boolean hasRole(Principal principal, String role) {

        // Should be overriten in JAASRealm - to avoid pretty inefficient
conversions
        if ((principal == null) || (role == null) ||
            !(principal instanceof GenericPrincipal))
            return (false);

        GenericPrincipal gp = (GenericPrincipal) principal;
        if (!(gp.getRealm() == this)) {
            log.debug("Different realm " + this + " " + gp.getRealm());//
return (false);
        }
        boolean result = gp.hasRole(role);
        if (log.isDebugEnabled()) {
            String name = principal.getName();
            if (result)
                log.debug(sm.getString("realmBase.hasRoleSuccess", name,
role));
            else
                log.debug(sm.getString("realmBase.hasRoleFailure", name,
role));
        }
        return (result);

    }
    
 Two things :
 1 - the comment says that it should be re-implemented in JAASRealm but it
is not done.
 2 - This implementation depends on a GenericPrincipal class specific to
Catalina packages.
 
 Maybe somebody is working about this JAASRealm and can help me to be able
to write a LoginModule that is not compiling depend of Catalina but usable
with Catalina.   
 
 A bonus question : why using two principals in server.xml realm tag if we
are using in one code?
 
 It seems there is an error in the manual (Realm Element Attributes Table
seems to talk about MemoryRealm instead of JAASRealm).
 
 Thanks in advance for any help. 

Emmanuel BURRIEL

Reply via email to