JAAS java authentification et autorisation service

musliim - 16 mars 2013 à 18:13
 musliim - 22 mars 2013 à 16:15
est ce que pour utiliser JAAS sur netbeans j'ai besoin d'installer plugin ou un model parceque j'ai écrit un petit programme de test et sa fonction pas

il m'affiche une exception :
Exception in thread "main" javax.security.auth.login.LoginException: Aucun LoginModule configuré pour jaass
at javax.security.auth.login.LoginContext.init(LoginContext.java:273)

4 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
18 mars 2013 à 10:52
Salut,

Non JAAS est dans le jre tu n'as donc pas besoin de module supplémentaire. Apparemment, tu n'as pas configuré de module de login, je ne sais pas trop ce que cela veut dire dans ton cas. Tu utilises un tutoriel ?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
20 mars 2013 à 11:28
Des nouvelles ?
0
nn pas de tuto, j'utilise la documentation d'oracl

voila un petit aperçut sur le code :

main du projet :
package jaastest;

import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

/**
 *
 * @author majid
 */
public class Jaastest {

    public Jaastest() throws LoginException{
        LoginContext jaasContext = new LoginContext("jaass", new Kalback());
        jaasContext.login();
        Subject.doAsPrivileged(jaasContext.getSubject(), new doAction(),null);
        jaasContext.logout();
    }
    
    
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws LoginException {
        // TODO code application logic here
        Jaastest jt = new Jaastest();
    }
}



callBackHandler :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jaastest;

import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;

/**
 *
 * @author majid
 */
public class Kalback implements CallbackHandler{

    private String name ;
    private char[] password ;

    public Kalback() {
    }
    
    
    
    public Kalback(String name, char[] password) {
        this.name = name;
        this.password = password;
    }

    @Override
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException{
        NameCallback userName = null ;
        PasswordCallback userPassword = null ;
        for ( int i = 0 ; i < callbacks.length ; i++) {
            if(callbacks[i] instanceof NameCallback ) {
                userName = (NameCallback) callbacks[i];
            } else if ( callbacks [i] instanceof PasswordCallback) {
                userPassword = (PasswordCallback) callbacks[i];
            } else {
                throw new UnsupportedCallbackException (callbacks[i]);
            }
        }
        this.name="majid";
        this.password = "majid".toCharArray();
        userName.setName(this.name);
        userPassword.setPassword(this.password);
    }
    
}


mon LoginModule :
package jaastest;

import java.util.Map;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;

/**
 *
 * @author majid
 */
public class ModuleConnexion implements LoginModule{
    
     private Subject subject;
    private CallbackHandler callbackHandler;
    private NamePrincipal namePrincipal;
    private boolean debug ;
    private String userName ;
    private boolean succeeded = false ;
    private boolean commitSucceeded = false;
    private Map sharedState;

    @Override
    public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
        this.subject = subject;
        this.callbackHandler= callbackHandler;
        debug ="true". equalsIgnoreCase((String) options.get("debug"));
    }

    @Override
    public boolean login() throws LoginException {
        if ( debug ) {
            System.err.println("ModuleConnexion : login");
        }
        NameCallback nameCallback = new NameCallback ("user :");
        PasswordCallback passwordCallback =new PasswordCallback("password : ", false);
        Callback[] callbacks = new Callback[]{nameCallback ,passwordCallback} ;
        try {
            callbackHandler.handle(callbacks);
        } catch ( Exception ex ) {
            ex.printStackTrace();
        throw new LoginException ("Error while getting user input !") ;
        }
        userName = nameCallback.getName();
        succeeded = validateUser( userName , passwordCallback.getPassword ( ) ) ;
        passwordCallback.clearPassword();
        return succeeded ;
    }

    @Override
    public boolean commit() throws LoginException {
            if(debug){
            System.err.println("GUILoginModule : commit");
        }
        if(!succeeded){
            userName = null;
            return false;
        }
        namePrincipal = new NamePrincipal ( userName ) ;
        if( !subject.getPrincipals().contains(namePrincipal)){
            subject.getPrincipals().add(namePrincipal);
        }
        userName = null;
        commitSucceeded = true ;
        return true ;
    }

    @Override
    public boolean abort() throws LoginException {
        if(debug){
            System.err.println("GUILoginModule : abort");
        }
        if(!succeeded){
            return false;
        }else if ( succeeded && commitSucceeded ) {
            logout();
        } else {
            succeeded = false;
        }
        return true ;
    }

    @Override
    public boolean logout() throws LoginException {
        if( debug ) {
            System.err.println("GUILoginModule : logout") ;
        }
        subject.getPrincipals().remove(namePrincipal ) ;
        namePrincipal = null ;
        userName = null ;
        succeeded commitSucceeded false ;
        return true ;
    }
    
    private boolean validateUser ( String userName , char [ ] password ) {
        return "majid".equals( userName ) && "majid".equals (new String ( password ) ) ;
    }
}



Principal :
public class NamePrincipal implements Serializable,Principal{
    private String name ;
    
    public NamePrincipal (String name ) {
        this . name = name ;
    }

    public boolean equals ( Object another ) {
        if(!(another instanceof NamePrincipal ) ) {
            return false;
        }
        return ((NamePrincipal)another).name.equals(name);
    }

    public String getName(){
        return name ;
    }


PrivelegeAction :

package jaastest;

import java.security.PrivilegedAction;

/**
 *
 * @author majid
 */
public class doAction implements PrivilegedAction{

    @Override
    public Object run() {
        return "Vous ete authentifier";
    }
    
    
}


fichier de configuration jaas.conf:
jaass {
jaastest.ModuleConnexion required debug=true;
};
0
en faite j'ai trouvé quelque par que le problème c dans l’exception levé

ici j’utilise LoginException et ce qui est recommander c'est SecurityException mais je vois pas comment l’implémenté (https://issues.apache.org/jira/browse/HARMONY-771)
0
Rejoignez-nous