首頁 > Java > java教程 > 使用自訂 FacesServlet 時,為什麼 JSF 表單提交的授權重定向失敗?

使用自訂 FacesServlet 時,為什麼 JSF 表單提交的授權重定向失敗?

Barbara Streisand
發布: 2024-11-03 01:51:29
原創
293 人瀏覽過

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

JSF 表單提交中會話過期的授權重定向

問題:

在J🎜>問題:

原因:

出現此問題的原因是JSF 命令連結/按鈕觸發了Ajax 請求,該請求需要XML 回應。但是,sendRedirect() 方法會傳送 Ajax 引擎無法解釋的常規 HTML 頁面。因此,不會執行重定向,頁面保持不變。

解決方案:

1.使用Servlet 過濾器:

不應使用自訂Servlet,而應使用Servlet 過濾器進行授權檢查。這是推薦的方法,因為它更適合任務。

2.以不同方式處理 Ajax 請求:

在過濾器中,單獨處理 Ajax 請求。不要發送重定向,而是發送一個特殊的 XML 回應來指示 JSF Ajax 引擎執行重定向。

範例篩選器:

<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>
登入後複製

依照下列步驟操作,頁面導覽和 JSF 表單提交都可以正確實現授權重定向功能。

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

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