【问题标题】:JSF ajax request calls filter (should be ignored!)JSF ajax 请求调用过滤器(应该被忽略!)
【发布时间】:2014-07-04 00:09:26
【问题描述】:

我有一些过滤器,可以抓取例如像“id”这样的参数来检查某些权利(用于加载某些内容)。这些过滤器应该忽略所有 ajax 请求,因为例如不必在每个小请求后检查权限(仅在页面加载时)

问题是,当我执行 ajax 请求时,它会抛出一个空指针,因为我没有在 ajax 请求中附加 ID。我发现,当我使用它时它仍然有效,当我使用它失败时(两者都执行 ajax 请求)。

这是我的过滤器:

public class ExtendedAccessFilter implements Filter {


    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;

            //ignore filter if it is an ajax-request (DOES NOT WORK if not p:commandButton!)
        if(isAJAXRequest(req)){
            chain.doFilter(request, response);
            System.out.println("ABORT FILTER, AJAX");
            return;
        }

        //Nullpointer thrown here (because no Id is submitted)
        int requestedId = Integer.parseInt(request.getParameter("id"));

}

    private boolean isAJAXRequest(HttpServletRequest request) {
      boolean check = false;
      String facesRequest = request.getHeader("Faces-Request");
      if (facesRequest != null && facesRequest.equals("partial/ajax")) {
        check = true;
      }
      return check; 
    }

}

我做错了吗?

【问题讨论】:

  • request.getParameter("id") != null 时不能只做过滤吗?
  • 这是完全预期的行为。毕竟,Ajax 请求是请求,并且也会被过滤。
  • @simon;那么所有其他页面也将绕过此机制。我只想忽略 ajax

标签: ajax jsf filter


【解决方案1】:

你做对了。您也可以使用 JSF API 通过检查 PartialViewContext 是否存在并且它是一个 Ajax 请求来做到这一点

if(FacesContext.getCurrentInstance().getPartialViewContext() !=null &&
      FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) {

}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 2012-07-26
  • 2021-11-04
  • 1970-01-01
  • 2014-02-14
  • 2013-03-07
  • 2014-10-03
  • 2012-06-03
相关资源
最近更新 更多