Rumah  >  Artikel  >  Java  >  Mengapa Pengalihan Kebenaran saya Gagal pada Borang JSF Hantar?

Mengapa Pengalihan Kebenaran saya Gagal pada Borang JSF Hantar?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 15:03:03887semak imbas

Why does my Authorization Redirect Fail on JSF Form Submit?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn