Niko
Niko

Reputation: 1094

JSF ajax request calls filter (should be ignored!)

I have some filters, which grab e.g. a parameter like "id" to check some right (used to load some contents). These filters should ignore all ajax-requests, because e.g. the rights does not have to be checked after every little request (only on page load)

The Problem is, that when I perform an ajax-request, it throws me a null-pointer, because I don't append the ID with ajax requests. I found out, that it still works, when I use and it fails, when I use (both perform ajax requests).

This is my filter:

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

}

Am I doing something wrong?

Upvotes: 2

Views: 1691

Answers (1)

Avinash Singh
Avinash Singh

Reputation: 3777

You are doing it right way. You can also do it using JSF API by checking if PartialViewContext exists and it is an Ajax Request

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

}

Upvotes: 1

Related Questions