Better than pure filter does not exist. SpringSecurity also filters, but is specific and cast.
Example:
/**
* Filter para tratar login no sistema
*/
@WebFilter(
filterName = "all", urlPatterns = { "/*" }, dispatcherTypes = { DispatcherType.ASYNC, DispatcherType.FORWARD,
DispatcherType.INCLUDE, DispatcherType.REQUEST, DispatcherType.ERROR })
public class NossoFilterAllRequest implements Filter
{
/**
* urlPatterns = { "/*" } isso vai fazer com todas as resições passem por aqui
*/
/**
* @Objetivo Implementar o filtro de logar no sistema
*/
@Override
public void doFilter(ServletRequest requestServlet, ServletResponse responseServlet, FilterChain chain)
throws IOException, ServletException
{
try
{
final HttpServletRequest rq = (HttpServletRequest) request;
final HttpServletResponse rp = (HttpServletResponse) response;
final SeuObjetoSessaoLogin objSession = (SeuObjetoSessaoLogin) rq.getSession().getAttribute("login");
//sua lógica
chain.doFilter(request, response);
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public void destroy()
{
//se precisar logicas de baixar algum serviço, executa quando para o serviço
}
@Override
public void init(FilterConfig config) throws ServletException
{
//se precisar iniciar alguma lógica.. executa quando inicia o serviço
}
}