首頁  >  文章  >  Java  >  為什麼我的 JSF 表單提交授權重定向失敗?

為什麼我的 JSF 表單提交授權重定向失敗?

Linda Hamilton
Linda Hamilton原創
2024-10-26 15:03:03887瀏覽

Why does my Authorization Redirect Fail on JSF Form Submit?

由於實施不當,JSF 表單提交時授權重定向失敗

在JSF 中實現自訂授權時,使用正確的工具和方法至關重要方法。在這種情況下,自訂 FacesServlet 不適合處理授權檢查。

出現此問題的原因是自訂 FacesServlet 攔截所有請求,包括 JSF 命令連結/按鈕提交。然而,這些提交通常會觸發 AJAX 請求,這些請求需要特定的 XML 回應來指示 JSF ajax 引擎重定向頁面。

透過向 AJAX 請求發送重新導向標頭,自訂 FacesServlet 可以有效地使回應無效,導致頁面未變更。相反,它應該會傳回一個特殊的 XML 回應來重新導向瀏覽器。

此外,通常不鼓勵使用自訂 FacesServlet 進行授權。 Servlet 過濾器是處理此任務的更合適的機制。它提供了更大的靈活性,並避免了與負責 JSF 處理的 FacesServlet 的潛在衝突。

使用 Servlet 過濾器的正確實作

Servlet 過濾器可以設定為在每個請求之前進行幹預,啟用授權檢查。請考慮以下範例:

<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>

此篩選器提供授權的細微控制,並確保正確處理標準要求和 AJAX 請求,並在必要時將使用者重新導向到登入頁面。

以上是為什麼我的 JSF 表單提交授權重定向失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn