【发布时间】: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