Ubah Hala Kebenaran Gagal pada Borang JSF Dihantar Kerana Pelaksanaan Tidak Wajar
Apabila melaksanakan kebenaran tersuai dalam JSF, adalah penting untuk menggunakan alatan yang betul dan kaedah. Dalam kes ini, FacesServlet tersuai tidak sesuai untuk mengendalikan semakan kebenaran.
Isu timbul kerana FacesServlet tersuai memintas semua permintaan, termasuk penyerahan pautan arahan/butang JSF. Walau bagaimanapun, penyerahan ini sering mencetuskan permintaan AJAX, yang menjangkakan respons XML khusus yang mengarahkan enjin ajax JSF untuk mengubah hala halaman.
Dengan menghantar pengepala ubah hala kepada permintaan AJAX, FacesServlet tersuai secara berkesan menjadikan respons itu tidak sah, mengakibatkan halaman tidak berubah. Sebaliknya, ia harus mengembalikan respons XML khas yang mengubah hala penyemak imbas.
Selain itu, penggunaan FacesServlet tersuai untuk kebenaran biasanya tidak digalakkan. Penapis servlet ialah mekanisme yang lebih sesuai untuk mengendalikan tugas ini. Ia menawarkan fleksibiliti yang lebih besar dan mengelakkan kemungkinan konflik dengan FacesServlet, yang bertanggungjawab untuk pemprosesan JSF.
Pelaksanaan Betul Menggunakan Penapis Servlet
Penapis servlet boleh dikonfigurasikan untuk campur tangan sebelum setiap permintaan, membolehkan semakan kebenaran. Pertimbangkan contoh berikut:
<code class="java">@WebFilter("/*") public class AuthorizationFilter implements Filter { // Generate XML response for AJAX redirects private static final String AJAX_REDIRECT_XML = "..."; @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ... { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; HttpSession session = request.getSession(false); // Define authorization flags boolean loggedIn = ...; boolean loginRequest = ...; boolean resourceRequest = ...; boolean ajaxRequest = ...; // Handle authorization and redirection if (loggedIn || loginRequest || resourceRequest) { // Continue request chain.doFilter(request, response); } else if (ajaxRequest) { // Return XML response for AJAX redirects response.getWriter().printf(AJAX_REDIRECT_XML, loginURL); } else { // Perform synchronous redirect response.sendRedirect(loginURL); } } }</code>
Penapis ini menyediakan kawalan terperinci ke atas kebenaran dan memastikan kedua-dua permintaan standard dan AJAX dikendalikan dengan betul, mengubah hala pengguna ke halaman log masuk jika perlu.
Atas ialah kandungan terperinci Mengapa Pengalihan Kebenaran saya Gagal pada Borang JSF Hantar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!