Rumah >Java >javaTutorial >Bagaimana Mengendalikan Kegagalan Kebenaran Semasa Penyerahan Borang JSF?
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 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.
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.
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); } } }
Untuk mendapatkan maklumat lanjut tentang topik ini, rujuk sumber berikut:
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!