


Comment gérer les échecs d'autorisation lors des soumissions de formulaires JSF ?
Oct 30, 2024 am 05:51 AMÉchecs d'autorisation lors des soumissions de formulaires JSF : une analyse complète
Lors de la mise en œuvre de mécanismes d'autorisation personnalisés dans les applications JSF, il est crucial de comprendre la distinction entre la navigation dans les pages et les soumissions de formulaires . Bien que les redirections fonctionnent de manière transparente pour la navigation dans les pages, elles peuvent rencontrer des problèmes lors des soumissions de formulaires.
Cause du problème
La cause première de ce problème réside dans le fait que les soumissions de formulaires JSF déclenchent des requêtes asynchrones. Lorsqu'une redirection est envoyée en réponse à une requête asynchrone, le moteur JSF AJAX attend une réponse XML spécifique. Cependant, l'envoi d'une page HTML standard viole cette attente, ce qui fait que l'utilisateur reste sur la même page.
Le mauvais outil pour le travail
L'utilisation d'un servlet personnalisé pour effectuer des vérifications d'autorisation introduit une complexité supplémentaire et les problèmes potentiels. Au lieu de cela, l'approche recommandée consiste à utiliser un filtre de servlet spécialement conçu à cet effet. Les filtres offrent un moyen plus robuste et plus efficace d'intercepter les demandes entrantes.
Une mise en œuvre complète du filtre
Vous trouverez ci-dessous un exemple de filtre de servlet qui gère efficacement les contrôles d'autorisation :
@WebFilter("/*") public class AuthorizationFilter implements Filter { private static final String AJAX_REDIRECT_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<partial-response><redirect url=\"%s\"></redirect></partial-response>"; @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; HttpSession session = request.getSession(false); String loginURL = request.getContextPath() + "/login.xhtml"; boolean loggedIn = (session != null) && (session.getAttribute("user") != null); boolean loginRequest = request.getRequestURI().equals(loginURL); boolean resourceRequest = request.getRequestURI().startsWith(request.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER + "/"); boolean ajaxRequest = "partial/ajax".equals(request.getHeader("Faces-Request")); if (loggedIn || loginRequest || resourceRequest) { // Continue request. chain.doFilter(request, response); } else if (ajaxRequest) { // Send special XML response to instruct JSF AJAX to redirect. response.setContentType("text/xml"); response.setCharacterEncoding("UTF-8"); response.getWriter().printf(AJAX_REDIRECT_XML, loginURL); } else { // Perform стандартный синхронный редирект. response.sendRedirect(loginURL); } } }
Ressources supplémentaires à considérer
Pour plus d'informations sur ce sujet, reportez-vous aux ressources suivantes :
- [En utilisant JSF 2.0 / Facelets, existe-t-il un moyen d'attacher un auditeur global à tous les appels AJAX ?](https://stackoverflow.com/questions/11687648/using-jsf-2-0-facelets-is-there-a-way-to-attach-a-global-listener-to-all -ajax-calls)
- [FullAjaxExceptionHandler n'affiche pas la page d'erreur de session expirée sur le bouton ajax](https://stackoverflow.com/questions/25366069/fullajaxexceptionhandler-does-not-show-session-expired-error -page-sur-ajax-bouton)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?

Node.js 20: Boosts de performances clés et nouvelles fonctionnalités

Iceberg: L'avenir des tables de Data Lake

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?

Comment puis-je implémenter des techniques de programmation fonctionnelle en Java?

Spring Boot SnakeyAml 2.0 CVE-2022-1471 Issue fixe
