2015-12-14 14 views
6

Ho una webapp java che utilizza Spring MVC. la webapp è in esecuzione su un server jboss AS7.1 che utilizza il modulo di login JAAS con l'autenticazione del modulo. L'accesso funziona senza problemi quando l'utente compila il nome utente e la password nel modulo.Login automatico JAAS senza mostrare una pagina di accesso/modulo

Vorrei ora creare un controller java che "registra un utente in" come se l'utente abbia compilato il modulo di accesso.

public void logInProgrammatically(String username, string password) 
{ 
    //??? 
} 

Quando il metodo di cui sopra finiture, qualsiasi accesso a qualsiasi pagina protetta dovrebbe essere consentito perché l'utente è considerato connesso.

Questo può essere programmato accedendo implementazione di Jboss del LoginModule, e impostando alcune proprietà ?

+0

Posso chiedere qual è il problema esatto che stai cercando di risolvere? –

risposta

0

WebAuthentication da Jboss offre la funzionalità desiderata quasi fuori dalla scatola. L'idea è che è possibile creare il proprio servlet o classe personalizzata, come presentato here che può chiamare direttamente con uno user specificato e uno password.

Ie. nel vostro logInProgrammatically si può avere qualcosa di simile a ciò che è stato implementato nel LoginHandler presentato here:

public void logInProgrammatically(String username, string password) 
{ 
    // ... 
    WebAuthentication webA = new WebAuthentication(); 
    webA.login(username, password); 
    // ... 
} 
+0

La classe di Webauthentication non è presente in JBOSS7. È disponibile nelle versioni precedenti di jboss. Non sono sicuro del motivo per cui è stato rimosso. C'è un'alternativa? – user1884155

+0

@ user1884155 Come menzionato nel commento sulla tua altra domanda. È possibile utilizzare 'Servlet3AuthenticationFilter', che utilizza le specifiche di accesso 'Servlet 3'. – dan

0

È possibile utilizzare le classi standard JAAS per ottenere l'autenticazione programatically. Diciamo che stiamo usando la nostra implementazione LoginModule personalizzata (o qualsiasi implementazione standard), com.sample.CustomLoginModule. Questo modulo di login è configurato in XML di configurazione jboss.

Passaggio 1: definire un dominio di sicurezza in JBoss. Per altri server, le stesse informazioni possono essere configurate in configurazione JAAS.

<security-domain name="customlogin" cache-type="default"> 
    <authentication> 
     <login-module code="com.sample.CustomLoginModule" flag="required"> 
     </login-module> 
    </authentication> 
</security-domain> 

Fase 2: Use Custom login modulo a utenti registrati programatically.

public void logInProgrammatically(String username, string password){ 
    CallbackHandler handler = //use proper implementation to capture username and password arguments. 
    LoginContext ctx = new LoginContext("customlogin", handler); 
    ctx.login(); 

}

Con questa soluzione, non sono tenuti a API server applicazioni specifiche. Questo codice è trasferibile su qualsiasi server di applicazioni con modifiche di configurazione JAAS.

Per programatically l'autenticazione tramite JAAS, vedere il tutorial da Oracle: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html

+0

Questo non funziona perché sebbene io abbia effettuato l'accesso nel contesto, il contenitore JBOSS non è a conoscenza di questo fatto. Come tale, impedirà l'accesso alle pagine protette e mostrerà il loginscreen. Perchè è questo? Quale proprietà magica (richiesta) jboss vede/usa che il contesto di login non imposta/usa? – user1884155

Problemi correlati