Domanda

Ho un'applicazione web, distribuito su GlassFish 3.0.1, che sta utilizzando contenitore di sicurezza gestita. E 'un semplice, forma standard implementazione basata utilizzando j_security_check contro un JDBCRealm. Tutto a che fare con il fissaggio l'applicazione è bene (e non riesco a credere che ho rotolato i miei sistemi di sicurezza in passato).

Quello che non riesco a capire se è come affrontare il caso in cui un utente immette la password errata. La mia pagina "loginFailed.xhtml" viene visualizzato correttamente, ma vorrei poi basta indirizzare la schiena utente alla pagina di login (tramite un link o automaticamente) per riprovare.

Quando ho provato questo il link alla pagina di login.xhtml funziona bene, ma il sistema di sicurezza sembra aver dimenticato dove sta tentando di inviare l'utente dopo aver autenticato. Quando l'utente non correttamente l'autenticazione viene sollevata un'eccezione perché i tentativi sistema per caricare una pagina che non esiste (qualche versione straziati dell'URL della pagina di login).

Suppongo che ho potuto dirigere la parte posteriore utente alla home page e far loro provare di nuovo da lì, ma non ho mai visto una domanda con che molto di un ripiego per lungo tempo. Tutte le idee e l'aiuto riconoscente ricevuto ...

È stato utile?

Soluzione

Sto assumendo il tuo solo utilizzando j_security_check in una pagina HTML semplice, giusto? Si può effettivamente fare un login programmatica ora utilizzando il metodo HttpServletRequest # login.

Ecco un esempio.

public String login() {

    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();

    try {
        request.login(this.userName, this.password);
        return "index?faces-redirect=true";
    } catch (Exception e) {
        return "error?faces-redirect=true";
    }

Quindi, è possibile inviare loro dove vuoi dopo che login. Questo è solo un fagiolo JSF supporto di serie con le variabili nome utente e la password utente.

Il h: commandButton usa questo metodo di login come l'azione JSF.

Altri suggerimenti

In effetti, un'altra soluzione sarà JavaScript per poter utilizzare se non volete gestire il login nel vostro java.

login.html (semplice form html)

<form name="loginForm" method="POST" action="j_security_check">
    <input id="username" type="text" />
    <input id="password" type="password" />
    <input type="submit"value="Login" />
</form>

Poi per l'error.html basta aggiungere un po 'di javascript per il corpo onload

function redirect() {
window.location("http://yournewurl")
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top