Rumah >Java >javaTutorial >Bagaimana Mengendalikan Kegagalan Kebenaran Semasa Penyerahan Borang JSF?

Bagaimana Mengendalikan Kegagalan Kebenaran Semasa Penyerahan Borang JSF?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 05:51:02407semak imbas

How to Handle Authorization Failures During JSF Form Submissions?

Kegagalan kebenaran semasa penyerahan borang JSF: Analisis komprehensif

Apabila melaksanakan mekanisme kebenaran tersuai dalam aplikasi JSF, adalah penting untuk memahami perbezaan antara navigasi halaman dan penyerahan borang . Walaupun ubah hala berfungsi dengan lancar untuk navigasi halaman, mereka boleh menghadapi masalah semasa penyerahan borang.

Punca Masalah

Punca isu ini terletak pada fakta bahawa penyerahan borang JSF mencetuskan permintaan tak segerak. Apabila ubah hala dihantar sebagai respons kepada permintaan tak segerak, enjin JSF AJAX menjangkakan respons XML tertentu. Walau bagaimanapun, menghantar halaman HTML biasa melanggar jangkaan ini, menyebabkan pengguna kekal pada halaman yang sama.

Alat yang Salah untuk Kerja

Menggunakan servlet tersuai untuk melakukan semakan kebenaran memperkenalkan kerumitan tambahan dan isu yang berpotensi. Sebaliknya, pendekatan yang disyorkan ialah menggunakan penapis servlet yang direka khusus untuk tujuan ini. Penapis menawarkan cara yang lebih mantap dan cekap untuk memintas permintaan masuk.

Pelaksanaan Penapis Komprehensif

Di bawah ialah contoh penapis servlet yang mengendalikan semakan kebenaran dengan berkesan:

@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);
    }
  }

}

Sumber Tambahan untuk Pertimbangan

Untuk mendapatkan maklumat lanjut tentang topik ini, rujuk sumber berikut:

  • [Menggunakan JSF 2.0 / Facelets, adakah terdapat cara untuk melampirkan pendengar global ke semua panggilan 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 tidak menunjukkan halaman ralat tamat sesi pada butang ajax](https://stackoverflow.com/questions/25366069/fullajaxexceptionhandler-does-not-show-session-expired-error -halaman-pada-butang-ajax)

Atas ialah kandungan terperinci Bagaimana Mengendalikan Kegagalan Kebenaran Semasa Penyerahan Borang JSF?. 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