开发者

How do I use a custom realm with GlassFish 3.1?

I would like to use a custom realm with glassfish 3.1

I took the two file from this topic to try. Custom Glassfish Security Realm does not work (unable to find LoginModule)

The CustomRealm.java

package com.company.security.realm;
import com.sun.appserv.security.AppservRealm;
import com.sun.enterprise.security.auth.realm.BadRealmException;
import com.sun.enterprise.security.auth.realm.InvalidOperationException;
import com.sun.enterprise.security.auth.realm.NoSuchRealmException;
import com.sun.enterprise.security.auth.realm.NoSuchUserException;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;

public class CustomRealm extends AppservRealm
{
Vector<String> groups = new Vector<String>();

private String jaasCtxName;

private String startWith;

@Override
public void init(Properties properties)
throws BadRealmException, NoSuchRealmException {
    jaasCtxName = properties.getProperty("jaas-context", "customRealm");
    startWith = properties.getProperty("startWith", "z");
    groups.add("dummy");
}

@Override
public String getAuthType()
{
    return "Custom Realm";
}

public String[] authenticate(String username, char[] password) 
{
    // if (isValidLogin(username, password))
    return (String[]) groups.toArray();
}

@Override
public Enumeration getGroupNames(String username) 
throws InvalidOperationException, NoSuchUserException 
{
    return groups.elements();
}

@Override 
public String getJAASContext()
{
    return jaasCtxName;
}

public String getStartWith()
{
    return startWith;
}
}

And the custom login module

package com.company.security.realm;

import com.sun.appserv.security.AppservPasswordLoginModule;
import com.sun.enterprise.security.auth.login.common.LoginException;
import java.util.Set;
import org.glassfish.security.common.PrincipalI开发者_JAVA百科mpl;

public class CustomLoginModule extends AppservPasswordLoginModule
{    
    @Override
protected void authenticateUser() throws LoginException
{
    _logger.info("CustomRealm : authenticateUser for " +  _username);
    final CustomRealm realm = (CustomRealm)_currentRealm;

    if ( (_username == null) || (_username.length() == 0) || !_username.startsWith(realm.getStartWith())) 
        throw new LoginException("Invalid credentials");

    String[] grpList = realm.authenticate(_username, getPasswordChar()); 
    if (grpList == null) { 
        throw new LoginException("User not in groups");
    }

    _logger.info("CustomRealm : authenticateUser for " +  _username);

    Set principals = _subject.getPrincipals();
    principals.add(new PrincipalImpl(_username));

    this.commitUserAuthentication(grpList);

}
}

I added as well the module to the conf file

customRealm {
com.company.security.realm.CustomLoginModule required;
};

And I copy my 2 .class in the glassfish3/glassfish/domains/domain1/lib/classes/ as well as glassfish3/glassfish/lib

Everytime I want to create a new realm I have got the same error.

 ./asadmin --port 4949 create-auth-realm --classname com.company.security.realm.CustomRealm --property jaas-context=customRealm:startWith=a customRealm     

remote failure: Creation of Authrealm customRealm failed.  com.sun.enterprise.security.auth.realm.BadRealmException: java.lang.ClassNotFoundException: com.company.security.realm.CustomRealm not found by org.glassfish.security [101]

com.sun.enterprise.security.auth.realm.BadRealmException: java.lang.ClassNotFoundException: com.company.security.realm.CustomRealm not found by org.glassfish.security [101]
Command create-auth-realm failed.

I think i dont really understand how to add in the proper way my two files to glassfish.

This two files are created and compile from eclipse. I create a java project suctom login.

Someone can help ?

Thx a lot in advance, loic


Did you package it as an OSGi module (see the answer in the post you referenced)? If so, don't copy the jar file into $GF_HOME/lib or anything, instead deploy it as an OSGi module:

asadmin deploy --type osgi /path/to/CustomRealm.jar

Then add the login.conf settings. To be on the safe side, I'd restart GF (asadmin restart-domain), then you can create the realm with the command you have there.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜