I need to forward my request (to a jsp but I don’t think it’s matter) from an http.Filter
if the URI of the original request pass some validation that my filter runs.
I found this page that faced similar task
Still I need to figure the following:
-
How can I get ServletContext in
doFilter()method (in order to call forward API)getServletContext()is not recignized -
Do I have to
call chain.doFilter()before the forward, after the forward or not at all?
In addition do I have to callchain.doFilter()if my validation passed or only if it fails (because in this case I won’t continue to forward my page)?
This question actually continue this thread,
to be more obvious, the code could be something like:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (request instanceof HttpServletRequest) {
HttpServletRequest httpServletRequest = ((HttpServletRequest)request);
String requestURI = httpServletRequest.getRequestURI();
String contextPath = httpServletRequest.getContextPath();
if (<this is my implementation of the validation of this filter>){
getServletContext().getRequestDispatcher(
"MySpecific.jsp").forward(request,response);
}
}
chain.doFilter(request,response);
}
I would say that if you forwarded the request, you should not call
chain.doFilter()– the forwarded request will get filtered according to its own filter configuration. If your validation failed though, it depends on what the semantics of your web app are – if the original page is some sort of general error/login/welcome screen, you may want to continue to that when the validation failed. It is hard to say without knowing more of the context.