2012-10-08 9 views
6

Sto cercando di eseguire il codice all'interno di JBoss contenitore sotto un autenticazione diverso da programatically login di un utente del genere (la gestione delle eccezioni messo a nudo):login di un utente a livello di codice tramite JAAS

LoginContext ctx = ctx = 
    new LoginContext("MyLoginSchema", 
     new UsernamePasswordCallbackHandler("newuser", "") 
    ); 
ctx.login(); 

Subject.doAs(ctx.getSubject(), new PrivilegedAction<T>() { 
    @Override 
    public T run() { 
     Subject.getSubject(AccessController.getContext()); 
     InitialContext ic = new InitialContext(); 
     EJBContext sctxLookup = (EJBContext) ic.lookup("java:comp/EJBContext"); 
     Principal principal = sctxLookup.getCallerPrincipal(); 
    }   
}); 

Entrata di newuser opere (Chiamata di LoginModule ha avuto esito positivo) ma Subject.doAs() non associa il nuovo oggetto allo EJBContext. Il codice nel metodo run() -method recupera ancora il principal del vecchio utente da EJBContext.

ho provato un altro metodo di recupero del utente collegato, ma stesso comportamento qui:

Subject caller = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container"); 

Tutte le idee?

risposta

2

Which LoginModule stai usando adesso? In JBoss 6.1 è stato necessario utilizzare ClientLoginModule per l'autenticazione nel contenitore.

+0

Sì! Questo è il punto. Ho aggiunto ClientLoginModule e ha funzionato. – roehrijn

0

La mia comprensione è che al momento non è supportata da JBoss AS 7.1. Vedi this thread

Modifica

Quello che ho scritto qui è sbagliato, il filo si applica solo ai client di accesso lato (al di fuori di un JBoss).

+0

è supportato. Vedi la risposta sopra. – roehrijn

+0

Ah, sì, è un accesso laterale severo, il mio male. –

+0

No, la risposta è korrect. Il mio codice funziona con ClientLoginmodule nello stack LoginModule. – roehrijn

Problemi correlati