2012-10-08 18 views
6

Estoy intentando ejecutar código dentro de JBoss Recipiente bajo una autenticación diferente por la tala mediante programación en un usuario de esa manera (manejo de excepciones despojado):Login un usuario mediante programación a través de 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(); 
    }   
}); 

sesión de newuser obras (Call de LoginModule fue exitoso) pero Subject.doAs() no asocia el nuevo Asunto con el EJBContext. El código en el run() -Método aún recupera el principal del usuario anterior de EJBContext.

He probado otro método de recuperar el usuario conectado, pero mismo comportamiento aquí:

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

¿Alguna idea?

Respuesta

2

¿Cuál es el LoginModule que usa ahora? En JBoss 6.1, tenía que usar ClientLoginModule para autenticarse en el contenedor.

+0

Sí! Ese es el punto. Agregué ClientLoginModule y funcionó. – roehrijn

0

Según tengo entendido, esto actualmente no es compatible con JBoss AS 7.1. Ver this thread

Editar

Lo que escribí aquí es incorrecto, el hilo sólo se aplica a la entrada del lado del cliente (fuera de un JBoss).

+0

es compatible. Ver respuesta arriba. – roehrijn

+0

Ah, sí, es el inicio de sesión del lado del servidor, mi mal. –

+0

No, la respuesta es correcta. Mi código funciona con ClientLoginmodule en la pila LoginModule. – roehrijn

Cuestiones relacionadas