जेएसएफ अनुप्रयोगों में कस्टम प्राधिकरण तंत्र लागू करते समय, पेज नेविगेशन और फॉर्म सबमिशन के बीच अंतर को समझना महत्वपूर्ण है . जबकि रीडायरेक्ट पेज नेविगेशन के लिए निर्बाध रूप से काम करते हैं, वे फॉर्म सबमिशन के दौरान समस्याओं का सामना कर सकते हैं।
इस समस्या का मूल कारण इस तथ्य में निहित है कि जेएसएफ फॉर्म सबमिशन अतुल्यकालिक अनुरोधों को ट्रिगर करता है। जब एक अतुल्यकालिक अनुरोध के जवाब के रूप में रीडायरेक्ट भेजा जाता है, तो JSF AJAX इंजन एक विशिष्ट XML प्रतिक्रिया की अपेक्षा करता है। हालाँकि, एक नियमित HTML पेज भेजना इस अपेक्षा का उल्लंघन करता है, जिसके परिणामस्वरूप उपयोगकर्ता उसी पेज पर बना रहता है। और संभावित मुद्दे। इसके बजाय, अनुशंसित दृष्टिकोण इस उद्देश्य के लिए विशेष रूप से डिज़ाइन किए गए सर्वलेट फ़िल्टर का उपयोग करना है। फ़िल्टर आने वाले अनुरोधों को रोकने का अधिक मजबूत और कुशल साधन प्रदान करते हैं।
नीचे एक सर्वलेट फ़िल्टर का एक उदाहरण है जो प्राधिकरण जांच को प्रभावी ढंग से संभालता है:
विचार के लिए अतिरिक्त संसाधन
@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); } } }[जेएसएफ 2.0 / फेसलेट्स का उपयोग करना, क्या कोई तरीका है सभी AJAX कॉलों में एक वैश्विक श्रोता संलग्न करने के लिए?](https://stackoverflow.com/questions/11687648/using-jsf-2-0-facelet-is- there-a-way-to-attach-a-global- श्रोता-से-सभी-ajax-कॉल)[FullAjaxExceptionHandler AJAX बटन पर सत्र समाप्त त्रुटि पृष्ठ नहीं दिखाता है](https://stackoverflow.com/questions/25366069/fullajaxexceptionhandler-does-not-show- सत्र-समाप्त-त्रुटि-पृष्ठ-पर-अजाक्स-बटन)
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3