Cannot forward after response has been committed

Pessoal estou tendo o seguinte problema no meu filtro de permissoes:

17:37:50,810  INFO SecurityFilter:37 - acesso ao resource negado: /pages/home.jsf
17:37:50,826 ERROR [Faces Servlet]:253 - Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:313)
...
at br.com.peopleway.view.filter.SecurityFilter.doFilter(SecurityFilter.java:41)
...

Nao sei bem porque isso ocorre, e o pior é que so ocorre na primeira chamada da rotina ! as proximas requisicoes da acesso negado e nao redireciona para a pagina de acesso negado
Segue abaixo o codigo, desde já muito obrigado.

public class SecurityFilter implements Filter {
    ...
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
		PersonBO personBO = new PersonBO();
		HttpServletRequest request = (HttpServletRequest)servletRequest; 
		HttpServletResponse response = (HttpServletResponse)servletResponse;
		
		Users user = (Users) request.getSession().getAttribute(Users.KEY);
		String resource = request.getRequestURI().replaceAll(request.getContextPath(), "");
		
		if(personBO.userHasPermissionForResource(user, resource)){
			logger.info("acesso ao resource negado: " + resource);
			response.sendRedirect(DynamicMenu.linkDeniedPermission);
		}
		
		chain.doFilter(request, response);
	}
   ...
}

Esse tipo de coisa acontece quando por algum motivo você já começou a escrever no stream de saída. Será que não tem alguém escrevendo nele aí não?

Não achei nada relacionado, nao sei como isso pode estar ocorrendo, isso deveria ocorrer dentro do filtro ou poderia ser em outro lugar ?
Estou usando hibernate+JSF+ajax4jsf

segue abaixo o codigo completo do filtro

public class SecurityFilter implements Filter {
	
	private static final Logger logger = Util.startLogger(SecurityFilter.class);

	public void init(FilterConfig filterConfig) throws ServletException {
	}

	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
		PersonBO personBO = new PersonBO();
		HttpServletRequest request = (HttpServletRequest)servletRequest; 
		HttpServletResponse response = (HttpServletResponse)servletResponse;
		
		Users user = (Users) request.getSession().getAttribute(Users.KEY);
		String resource = request.getRequestURI().replaceAll(request.getContextPath(), "");
		
		if(!personBO.userHasPermissionForResource(user, resource)){
			logger.info("acesso ao resource negado: " + resource);
			response.sendRedirect(DynamicMenu.linkDeniedPermission);
		}
		
		chain.doFilter(request, response);
	}

	public void destroy() {		
	}

}