Question

J'ai une application web, déployée sur GlassFish 3.0.1, qui utilise la sécurité gérée par conteneur. Il est simple, forme standard implémentation basée sur l'utilisation j_security_check contre un JDBCRealm. Tout à voir avec la sécurisation de l'application est très bien (et je ne peux pas croire que j'ai roulé mes propres systèmes de sécurité dans le passé).

Ce que je ne peux pas sembler comprendre est bien comment traiter le cas où un utilisateur entre le mot de passe erroné. Ma page « loginFailed.xhtml » apparaît correctement, mais je voudrais simplement diriger ensuite le dos de l'utilisateur à la page de connexion (via un lien ou automatiquement) pour essayer à nouveau.

Quand j'ai essayé ce dos de lien vers la page login.xhtml fonctionne très bien, mais le système de sécurité semble avoir oublié où il essaie d'envoyer à l'utilisateur après avoir authentifié. Lorsque l'utilisateur n'authentifie correctement une exception est levée parce que le système tente de charger une page qui n'existe pas (une version mutilée de la page URL de connexion).

Je suppose que je pourrais diriger le dos de l'utilisateur à la page d'accueil et laissez-les essayer à nouveau de là, mais je ne l'ai pas vu une application avec beaucoup d'une bidouille pour longtemps. Toutes les idées et l'aide reçus avec gratitude ...

Était-ce utile?

La solution

Je suppose que votre juste en utilisant j_security_check sur une page html simple, correct? Vous pouvez effectivement faire un login programmatique en utilisant maintenant la méthode HttpServletRequest # login.

Voici un exemple.

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

Vous pouvez les envoyer où vous voulez après leur connexion. Ceci est juste un haricot de support standard JSF avec des variables membre nom d'utilisateur et mot de passe.

h: commandButton utilise cette méthode de connexion que l'action JSF.

Autres conseils

En effet, une autre solution sera d'utiliser javascript si vous ne voulez pas gérer la connexion dans votre java.

login.html (simple formulaire en 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>

Alors, pour la error.html il suffit d'ajouter un peu de javascript au corps onload

function redirect() {
window.location("http://yournewurl")
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top