Cześć.
Uczę się Javy EE i mam problem z filtrami.
Zastanawiam się czy jest sposób, aby filtr uruchomił się jedynie jeśli przy wywołaniu servletu zostanie podany jakiś parametr.
Np. mam servlet:
@WebServlet("/Hello.world")
public class TestServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
public TestServlet() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Test");
}
}
Oraz mam filtr:
@WebFilter(filterName = "TestFilter", urlPatterns={"/Hello.world"}, initParams={@WebInitParam(name = "param1", value = "abc")})
public class TestFilter implements javax.servlet.Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
PrintWriter out = servletResponse.getWriter();
out.println("test filtra");
if(servletRequest.getParameter("param1").equals("abc")) {
out.println("Parametr OK");
}
filterChain.doFilter(servletRequest,servletResponse);
}
public void destroy() {
}
}
Tutaj rozwiązałem to tak, że po prostu filtr uruchamia się zawsze, a dopiero w nim sprawdzana jest obecność parametru. Czyli nie do końca tak jakbym chciał, ale działanie prawie to samo. Czy jest to poprawne rozwiązanie?
I jeszcze jedna sprawa. Filtry uruchamiane są przed servletem. Czy jest jakiś mechanizm, coś jak postFiltr, który uruchamiałby się po servlecie?