7
votes

JSF Navigation Rediriger vers la page précédente

Une fois que l'utilisateur se connecte au système, le système redirigera l'utilisateur sur la page d'accueil. Maintenant, mon problème est que si l'utilisateur clique sur la page Afficher le compte sans vous connecter au système, le système redirigea l'utilisateur à la page de connexion. Si l'utilisateur se connecter au système maintenant, le système redirigera l'utilisateur sur la page d'accueil, dans ce cas, toute méthode peut rediriger l'utilisateur à la page précédente qui affiche la page de compte au lieu de la page d'accueil?

J'ai essayé d'utiliser la session < PRE> XXX

I Mettez ce code sous Public Void Dobtnaction () {} si l'utilisateur se connecte réussit, puis redirige vers l'URL. Mais j'ai reçu cette erreur xxx


0 commentaires

7 Réponses :


0
votes

Vous n'avez pas décrit aucune installation-cadre que vous utilisez pour l'authentification, donc je suppose que vous effectuez une authentification dans son propre code. Probablement, l'approche la plus simple consisterait à enregistrer une destination initiale en session avant de rediriger la page de connexion, puis après une connexion réussie, vous pouvez vérifier cet attribut et rediriger vers le bon endroit. Je particulier pour JSF, vous pouvez le faire en mode action qui traite la connexion. En réalité, je suggère d'utiliser un cadre d'authentification, par exemple la sécurité de printemps, car elle fait de telles choses hors de la boîte, et il sera beaucoup plus facile d'étendre votre système de sécurité au cas où vous auriez besoin de certaines fonctionnalités supplémentaires, bien qu'il en ait besoin de certaines Configuration supplémentaire


2 commentaires

La couture vous permet également de le faire hors de la boîte


J'utilise JSF et filtrer pour vérifier si la session est NULL si NULL redirige l'utilisateur de la connexion à la page.



2
votes

Pas sûr, mais essayez de faire cela via externalContext code> Installations:

Quelque chose comme ceci: p>

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.redirect(externalContext.encodeResourceURL(externalContext.getRequestContextPath()+getUrl()));


0 commentaires

-2
votes

Vous êtes trop tard et cela vous donne l'exception. Faites-le dans un phaselistener avant la phase de réponse de rendu.


0 commentaires

16
votes

Cette exception est causée car vous avez appelé réponse.sendedirect () code> et n'a pas bloqué JSF de rendant la réponse normale. Vous devez informer JSF qu'il n'a pas besoin de gérer une réponse normale en ajoutant xxx pré>

à la méthode d'action. P>

ou, encore mieux, tout simplement pas le httpservletresponse code> sous les hottes de la JSF, mais faire: p>

FacesContext.getCurrentInstance().getExternalContext().redirect(url);


5 commentaires

J'aime Stackoverflow! J'ai encore besoin de poser une question, car j'ai toujours trouvé le mien déjà répondu ici. Merci Balusc.


Cela ne fonctionne pas dans mon cas: lorsque j'appelle getattribute ("URL") sur httpsession, je reçois null. J'ai essayé d'appeler getrequesturi () sur le HttpServletQuest, mais cela renvoie l'URI de la page de connexion à laquelle l'utilisateur est redirigé s'il n'est pas connecté.


@Theo: C'est un problème totalement différent. Vous devez le mettre en premier lieu :)


J'ai posté une autre question pour cela: Stackoverflow.com/questions/4105263/... :)


J'ai essayé la solution, mais je me dispense de toujours une impression illegalStateException (mon code: faccescontext.getcurrentInstance (). RespectEcomplete (); facescoutext.getCurrentins TANCE (). GetExternalc Ontext (). Dispatch ("/ mypage.xhtml ");)



0
votes

java.lang.illegalStateException: ne peut pas transmettre après la réponse a été commis

L'exception est assez claire:

  • la réponse a été commise.
  • Vous ne pouvez pas transmettre après que la réponse a été commise.

    Qu'est-ce qui n'a pas de sens?


0 commentaires

0
votes

La logique décrite (login-redirection) doit être implémentée via la mécanique du filtre. Vous pouvez également essayer des règles de navigation JSF standard (si cela peut vous adapter au cas). Et si vous souhaitez toujours envoyer la redirection à une URL personnalisée et que vous ne voulez pas utiliser des filtres, faites-le dans votre servlet en phase de rendu, pas dans votre haricot JSF.


0 commentaires

-2
votes

Placer la syntaxe ci-dessous dans web.xml devrait fonctionner: xxx


1 commentaires

C'est la solution pour une cause différente qui arrive à donner une exception similiaire (mais pas la même!). Voir aussi Stackoverflow.com/Questtions/8072311/...