Dans cet article


Offres d'emploi

Tags

JSF – Rediriger après le login vers la page demandée (security-domain)

En cas d’accès à une page JSF  sans être connecté avec les contraintes de sécurité JAAS, le système va rediriger l’utilisateur vers la page de login. La sécurité s’effectue généralement avec le web.xml de la manière suivante:

<
security-constraint>
 <
web-resource-collection>
 <
web-resource-name>SecuredContent<
/web-resource-name>
 <
url-pattern>/secure/*<
/url-pattern>
 <
http-method>GET<
/http-method>
 <
http-method>POST<
/http-method>
 <
/web-resource-collection>
 <
auth-constraint>
 <
role-name>1<
/role-name>
 <
/auth-constraint><a href="/2014/06/JSF_redirect_requested_url.jpg">
</a>
 <
transport-guarantee>NONE<
/transport-guarantee>
 <
/user-data-constraint>
 <
/security-constraint>

Le problème est que lors de l’accès à la page de login, on perd l’information de la véritable page demandée par l’utilisateur. Ce qui est problématique si l’on souhaite redirigée correctement l’utilisateur suite à la connexion. Par exemple, le cas typique est un lien dans un e-mail redirigeant vers une page précise de l’application / site qui est dans un espace sécurisé. A l’accès à la page (en GET), la sécurité va rediriger l’utilisateur sur la page de login et on souhaite une fois connecté pouvoir envoyer l’utilisateur sur la véritable page du lien contenu dans l’e-mail.

Une solution simple à mettre en place consiste à créer une petite fonction qu’on appel au début de la page de login qui va stocker l’URL demandée lors de la redirection vers la page de login. Si on utilise directement getRequestUrl() sur l’externatcontext(), on va avoir index.xhtml et non pas la bonne URL.

Pour éviter ce problème, on peut récupérer dans la requestMap, l’information RequestDispatcher.FORWARD_REQUEST_URI. C’est dans cette variable que l’on va trouver l’URI réellement demandée par l’utilisateur. Ensuite, il suffit lors du clic sur le bouton login de rediriger l’utilisateur vers la page sauvegardée. Il est important de ne pas prendre en compte la page index.html pour éviter qu’en cas d’erreur de login, on perde l’information de l’URL initiale.

Trouver l’URL demandée par l’utilisateur

JSF redirect requested urlString lRequestedUrl = (String) FacesContext.getCurrentInstance()

.getExternalContext().getRequestMap()

.get(RequestDispatcher.FORWARD_REQUEST_URI);

if (lRequestedUrl != null && !lRequestedUrl.endsWith(« index.xhtml »)) {

mRequestedUrl = lRequestedUrl;

}

Lors du login

On teste l’url sauvegardée et on redirige vers la bonne URL.

if (mRequestedUrl != null && !mRequestedUrl.endsWith(« index.xhtml »)) {

return mRequestedUrl;

} else {

return « home »;

}

L'équipe AXOPEN

Voir aussi les articles suivants

L’objectif de cet article est de faire un point sur les points de vigilance dans le développement d’applications et sites web pour les rendre le plus accessibles possible avec les différents profils de handicap. L’accessibilité dans les applications et sites web est très complexe à mettre en oeuvre. Cet article ne prétend pas faire un état des lieux exhaustif de ce qu’il est nécessaire de faire mais tente modestement de lister quelques points de vigilance à destination des développeurs web.
Lire l'article

Il n’est pas forcément évident de faire un redirect 404 de manière programmatique en JAVA.  Un des principaux cas d’utilisation est lorsqu’on utilise un url rewritting pour générer des liens vers des pages web. Il peut arriver que la page web n’existe pas ou n’existe plus mais que la redirection (par exemple avec pretty-faces) vous a déjà fait calculer une partie de la page. Il devient dès lors très compliqué d’envoyer proprement une 404 au navigateur et non pas un simple message d’erreur.
Lire l'article

JSF – javax.faces.ViewState – id rendering

Le 31/01/2014 par Pierre Liseron

Le problème de l’id Lorsque l’on crée un formulaire JSF (), le moteur de rendu crée bien sûr une balise HTML , mais il ajoute également plusieurs de type hidden. Entre autre, le javax.faces.ViewState qui permet de récupérer l’état de vos composants d’une requête HTTP à l’autre. Le problème vient du fait que Mojarra, l’implémentation de référence, a la fâcheuse manie d’ajouter un id sur cet input avec la valeur statique « javax.
Lire l'article