会话到期时的授权重定向不适用于提交JSF表单,页面保持不变

会话到期时的授权重定向不适用于提交JSF表单,页面保持不变

我正在使用JSF2。我已经实现了一个自定义面部servlet,如下所示:

public class MyFacesServletWrapper extends MyFacesServlet {
    // ...}

其中我正在进行一些授权检查并在用户未登录时发送重定向:

public void service(ServletRequest request, ServletResponse response) {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;

    if (...) {
        String loginURL = req.getContextPath() + "/LoginPage.faces";
        res.sendRedirect(loginURL);
    }}

这在用户尝试导航到另一个页面时有效。但是,当JSF命令链接/按钮提交JSF表单时,这不起作用。该行sendRedirect()线被击中并执行,没有异常被抛出了,但用户停留在同一页面。基本上,根本没有视觉变化。

为什么这适用于页面导航,而不是表单提交?


杨魅力
浏览 373回答 3
3回答

HUH函数

。FacesContext.getCurrentInstance()getExternalContext()重定向( “newpage.xhtml”); 试试这....代替res.sendredirect(cpath)。

三国纷争

JSF ajax请求需要特殊的XML响应。HTTP 302响应不会被JSF ajax引擎解释为窗口重定向,而是重定向到新的XML响应。但是,如果该重定向实际上返回HTML页面,则会失败并显示“无反馈”。您需要返回一个特殊的XML响应,告诉JSF ajax引擎在给定的URL上发送重定向。您可以通过检查提到的响应头值来识别JSF ajax请求。在JSF方面,这通常是“幕后”处理的ExternalContext#redirect()。但是在JSF上下文之外,你必须手动处理它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java