hacer filtro delegatingfilterproxy como busqueda java servlets servlet-filters

delegatingfilterproxy - como hacer un filtro de busqueda en java



Cómo saltar un filtro en la cadena de filtros en java (2)

Además de la respuesta de Colin, hay otra forma: simplemente no llame a FilterChain#doFilter() , sino a RequestDispatcher#forward() .

if (condition) { request.getRequestDispatcher(((HttpServletRequest) request).getServletPath()).forward(request, response); } else { chain.doFilter(request, response); }

Pero esto omitirá todos los filtros actuales, espera de los que están escuchando en <dispatcher>FORWARD</dispatcher> .

Tengo 2 filtros en mi aplicación. Basado en alguna condición, quiero elegir si ejecutar el segundo filtro o no. ¿Hay alguna forma de hacer esto?

Hice un poco de googlear sin éxito. Quiero que la solicitud continúe sin ejecutar el segundo filtro. ¿Es eso posible?

Cualquier ayuda será apreciada.


Puede establecer un atributo en su solicitud y verificarlo en su segundo filtro.

public class FirstFilter implements Filter { //... public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setAttribute("executeSecondFilter", true); //... if(someReason) servletRequest.setAttribute("executeSecondFilter", false); filterChain.doFilter(servletRequest, servletResponse); } } public class SecondFilter implements Filter { //.. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { if (servletRequest.getAttribute("executeSecondFilter") == null || !((Boolean) servletRequest.getAttribute("executeSecondFilter"))) { filterChain.doFilter(servletRequest, servletResponse); } //... } }

Puede simplificar el código anterior de esta manera:

public class FirstFilter implements Filter { //... public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //... if(someReason) servletRequest.setAttribute("executeSecondFilter", false); filterChain.doFilter(servletRequest, servletResponse); } } public class SecondFilter implements Filter { //.. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { if (servletRequest.getAttribute("executeSecondFilter") != null) { filterChain.doFilter(servletRequest, servletResponse); } //... } }

De esta manera solo verifica la presencia del atributo "executeSecondFilter"