Eu usei esse curso pra criar meu próprio mini projeto, acabei tendo a ideia de fazer um filtro de autenticação. O problema com que me deparei é: por causa do MVC criado aqui as páginas são acessadas usando QUERY STRING.
O urlPatterns do @WebFilter por sua vez não entende query string e sim nome de páginas. Tentei colocar nome na Servlet e chamar no Flter, deu problema também parece que as classes não são Servlet e só implementam a interface Task.
Por fim, consegui mas é uma gambiarra, peço conselhos...
@WebFilter({"/controller"})
public class AuthenticationFilter implements Filter{
public static String[] restritos = new String[]{"CadastraProduto", "CadastraCategoria"};
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
Boolean isRestrict = Arrays.asList(restritos).contains(req.getParameter("action"));
/*users should be logged to access these pages*/
if(isRestrict && req.getSession().getAttribute("userOnline") == null) {
//dispatcher to login.jsp
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/pages/login.jsp");
dispatcher.forward(request, response);
}else {
//they are already logged
chain.doFilter(request, response);
}
}
@Override
public void destroy() {}
}