Rumah > Java > javaTutorial > Mengapa Pengalihan Keizinan Gagal pada Penyerahan Borang JSF Apabila Menggunakan FacesServlet Tersuai?

Mengapa Pengalihan Keizinan Gagal pada Penyerahan Borang JSF Apabila Menggunakan FacesServlet Tersuai?

Barbara Streisand
Lepaskan: 2024-11-03 01:51:29
asal
291 orang telah melayarinya

Why does Authorization Redirect Fail on JSF Form Submissions When Using a Custom FacesServlet?

Pengalihan Keizinan pada Tamat Tempoh Sesi dalam Penyerahan Borang JSF

Masalah:

Dalam JSF aplikasi, FacesServlet tersuai telah dilaksanakan untuk melakukan semakan kebenaran dan mengubah hala pengguna ke halaman log masuk jika tidak dilog masuk. Ini berfungsi seperti yang dijangkakan semasa navigasi halaman, tetapi apabila borang JSF diserahkan, ubah hala gagal dan pengguna kekal pada halaman yang sama.

Punca:

Isu timbul kerana pautan/butang arahan JSF mencetuskan permintaan Ajax, yang menjangkakan respons XML. Walau bagaimanapun, kaedah sendRedirect() menghantar halaman HTML biasa yang tidak dapat ditafsirkan oleh enjin Ajax. Akibatnya, ubah hala tidak dilakukan dan halaman kekal tidak berubah.

Penyelesaian:

1. Gunakan Penapis Servlet:

Daripada menggunakan servlet tersuai, penapis servlet harus digunakan untuk semakan kebenaran. Ini adalah pendekatan yang disyorkan kerana ia lebih disesuaikan dengan tugas.

2. Kendalikan Permintaan Ajax Secara Berbeza:

Dalam penapis, kendalikan permintaan Ajax secara berasingan. Daripada menghantar ubah hala, hantar respons XML khas yang mengarahkan enjin JSF Ajax untuk melakukan ubah hala.

Contoh Penapis:

<code class="java">import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AuthorizationFilter implements Filter {

    private static final String AJAX_REDIRECT_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
        "<partial-response><redirect url=\"%s\"></redirect></partial-response>";

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        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 ajaxRequest = "partial/ajax".equals(request.getHeader("Faces-Request"));

        if (loggedIn || ajaxRequest) {
            chain.doFilter(request, response);
        } else if (ajaxRequest) {
            response.setContentType("text/xml");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().printf(AJAX_REDIRECT_XML, loginURL);
        } else {
            response.sendRedirect(loginURL);
        }
    }
}</code>
Salin selepas log masuk

Dengan mengikuti langkah ini , fungsi ubah hala keizinan boleh dilaksanakan dengan betul untuk navigasi halaman dan penyerahan borang JSF.

Atas ialah kandungan terperinci Mengapa Pengalihan Keizinan Gagal pada Penyerahan Borang JSF Apabila Menggunakan FacesServlet Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan