首頁 > Java > java教程 > 如何處理JSF表單提交過程中的授權失敗?

如何處理JSF表單提交過程中的授權失敗?

Mary-Kate Olsen
發布: 2024-10-30 05:51:02
原創
409 人瀏覽過

How to Handle Authorization Failures During JSF Form Submissions?

JSF 表單提交期間的授權失敗:全面分析

在JSF 應用程式中實現自訂授權機制時,了解頁面導航和表單提交之間的區別至關重要。雖然重定向可以無縫地進行頁面導航,但它們在表單提交期間可能會遇到問題。

問題原因

此問題的根本原因在於 JSF 表單提交觸發非同步請求。當重定向作為對非同步請求的回應發送時,JSF AJAX 引擎需要特定的 XML 回應。然而,發送常規 HTML 頁面違反了這一預期,導致用戶停留在同一頁上。

錯誤的工具

使用自訂 servlet 執行授權檢查會帶來額外的複雜性和潛在的問題。相反,建議的方法是使用專為此目的設計的 servlet 過濾器。過濾器提供了一種更強大、更有效率的方法來攔截傳入請求。

全面的過濾器實作

以下是有效處理授權檢查的servlet 過濾器範例:

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

}
登入後複製

其他需要考慮的資源

要進一步了解此主題,請參閱以下資源:

  • [使用JSF 2.0 / Facelets,有沒有辦法附加全域偵聽器所有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 不在ajax 按鈕上顯示會話過期錯誤頁面](https://stackoverflow.com/questions/25366069/fullajaxexceptionhandler-does-not-show-session-expired-error -ajaxexceptionhandler-does-not-show-session-expired-error -ajax 按鈕上的頁面)

以上是如何處理JSF表單提交過程中的授權失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板