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;
};