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’URLUniform Ressource Locator 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.
String lRequestedUrl = (String) FacesContext.getCurrentInstance()
.getExternalContext().getRequestMap()
.get(RequestDispatcher.FORWARD\_REQUEST\_URI);
if (lRequestedUrl != null && !lRequestedUrl.endsWith(« index.xhtml »)) {
mRequestedUrl = lRequestedUrl;
}
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 »;
}
Ansible est une solution qui permet de faire principalement du déploiement automatisé et de la configuration automatisée. Ansible tourne avec Python, Powershell et Ruby et sert à automatiser la gestion des serveurs…
Pour améliorer la qualité du code Java de nos applications, nous avons créé notre outil agent Java. On vous en parle en détails dans cet article.
Si vous avez déjà développé avec l'aide d'un framework JavaScript, alors vous avez sûrement déjà lancé la fameuse commande `npm install`. Mais est-ce que vous savez réellement ce qu'il se passe à ce moment-là ? Comment cette simple commande fait pour gérer vos 783 dépendances qui elles-mêmes vont installer d'autres dépendances qui elles-mêmes vont installer d'autres… (`InternalError: too much recursion`). La réponse est dans cet article !