2011-10-04 8 views
1

Je souhaite implémenter l'authentification de base HTTP pour mes services Web, mais je souhaite également utiliser ObjectDB pour stocker les informations d'identification. Est-ce qu'il y a un moyen de faire ça? Je suppose que je suis dans le besoin d'un domaine personnalisé, et aussi, que quelqu'un l'a déjà fait avant, alors si oui, veuillez lever la main. Sinon, aidez-moi s'il vous plaît avec la mise en œuvre. J'ai déjà vérifié les bases de la création de domaines personnalisés. Est-il possible de le faire fonctionner avec JDBCRealm, ou plus directement, est-il possible de créer une ressource JDBC dans GlassFish qui utilise le serveur ObjectDB?Domaine personnalisé pour ObjectDB, utilisant ObjectDB avec l'authentification HTTP Basic

Ce que je l'ai fait jusqu'à présent est la base du Realm:

package objectdbrealm; 

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; 

public class ObjectDbRealm extends AppservRealm { 

    @Override 
    public void init(Properties properties) throws BadRealmException, NoSuchRealmException { 
     //initialize the realm 
    } 

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

    @Override 
    public Enumeration getGroupNames(String string) throws InvalidOperationException, NoSuchUserException { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 
} 

et LoginModule:

package objectdbrealm; 

import com.sun.appserv.security.AppservPasswordLoginModule; 
import com.sun.enterprise.security.auth.login.common.LoginException; 

public class ObjectDbLoginModule extends AppservPasswordLoginModule { 

    @Override 
    protected void authenticateUser() throws LoginException { 
     if (!authenticate(_username, _passwd)) { 
      //Login fails 
      throw new LoginException((new StringBuilder()).append("Login Failed for:").append(_username).toString()); 
     } 
     String[] groups = getGroupNames(_username); 
     commitUserAuthentication(groups); 
    } 

    private boolean authenticate(String username, char[] password) { 
     /* 
     Check the credentials against the authentication source, 
     return true if authenticated, return false otherwise 
     */ 
     return true; 
    } 

    private String[] getGroupNames(String username) { 
     // Return the list of groups this user belongs to. 
     return new String[0]; 
    } 
} 

MISE À JOUR

Malheureusement it turned out qu'il n'y a pas de pilote JDBC pour ObjectDB pour le moment. N'hésitez pas à faire des suggestions cependant!

Merci d'avance!

Répondre

0

It turned out qu'il n'existe pas encore de JDBCDriver pour ObjectDB. J'ai trop trouvé pour implémenter le mien, donc j'attendrai juste :)

1

Pas une réponse directe, mais il ya l'excellent FlexibleJDBCRealm qui offre une alternative à la JDBCRealm plutôt rigide qui vient avec le poisson. C'est l'open source, adapter le code à ObjectDB devrait être beaucoup plus facile que de commencer à implémenter un domaine à partir de zéro.

1

JDBC n'est pas obligatoire si vous utilisez Objectdb. Vous pouvez créer un Stateless EJB dans votre projet que l'accès à vos entités ObjectDB pour effectuer la connexion validation.The votre méthode

authentifie private boolean (nom d'utilisateur String, char [] mot de passe) peut utiliser un client EJB pour effectuer la validations d'informations d'identification. Ce example a bien fonctionné pour moi. La seule modification à apporter est l'utilisation de vos entités ObjectDb pour le modèle de données et, en guise d'amélioration, vous pouvez placer l'interface IUserAuthenticationService dans un fichier jar distinct pour éviter de distribuer l'implémentation.

Espérons que ça aide.

Rn