Utilizando Filter

Olá Pessoal!

Estou utilizando pela 1ª vez um Filter Java para controlar o acesso a paginas no sistema. Vamos ao sistema, abaixo está descrito o servlet que dá acesso ao sistema:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();

    String usuario = request.getParameter("usuario");
    String senha = request.getParameter("senha");
    RequestDispatcher rd = null;
    HttpSession sessao = request.getSession();

    UsuarioDAO usuarioDAO = new UsuarioDAO();
    Usuarios usuarios = usuarioDAO.getUsuario(usuario, senha);

    if(usuarios != null && usuarios.getNivel() == 1){
        sessao.setAttribute("sessaoUsuario", usuario);
        sessao.setAttribute("nomeCompleto", usuarios.getNomeCompleto());
        sessao.setAttribute("nome", usuarios.getUsuario());
        sessao.setAttribute("nivel", usuarios.getNivel());
        rd = request.getRequestDispatcher("/index.jsp");
        //System.out.println(usuarios.getNivel());
        rd.forward(request, response);
    }else if (usuarios != null && usuarios.getNivel() == 2){
        sessao.setAttribute("sessaoUsuario", usuario);
        sessao.setAttribute("nomeCompleto", usuarios.getNomeCompleto());
        sessao.setAttribute("nome", usuarios.getUsuario());
        rd = request.getRequestDispatcher("/index1.jsp");
        rd.forward(request, response);
    }else if (usuarios != null && usuarios.getNivel() == 3){
        sessao.setAttribute("sessaoUsuario", usuario);
        sessao.setAttribute("nomeCompleto", usuarios.getNomeCompleto());
        sessao.setAttribute("nome", usuarios.getUsuario());
        rd = request.getRequestDispatcher("/index2.jsp");
        rd.forward(request, response);
    }else{
        request.setAttribute("mensagem", "Usuario ou Senha Invalido!");
        rd = request.getRequestDispatcher("/login.jsp");
        rd.forward(request, response);
    }
} 

Agora desejo controlar o acesso a outro servlet Utilizando Filter. Está descrito abaixo:

public class Filtro implements Filter {

private static final boolean debug = true;
// The filter configuration object we are associated with.  If
// this value is null, this filter instance is not currently
// configured. 
private FilterConfig filterConfig = null;

public Filtro() {
}

private void doBeforeProcessing(ServletRequest request, ServletResponse response)
        throws IOException, ServletException {
    if (debug) {
        log("Filtro:DoBeforeProcessing");
    }

    // Write code here to process the request and/or response before
    // the rest of the filter chain is invoked.

    // For example, a logging filter might log items on the request object,
    // such as the parameters.
/*
    for (Enumeration en = request.getParameterNames(); en.hasMoreElements(); ) {
    String name = (String)en.nextElement();
    String values[] = request.getParameterValues(name);
    int n = values.length;
    StringBuffer buf = new StringBuffer();
    buf.append(name);
    buf.append("=");
    for(int i=0; i < n; i++) {
    buf.append(values[i]);
    if (i < n-1)
    buf.append(",");
    }
    log(buf.toString());
    }
     */
}

private void doAfterProcessing(ServletRequest request, ServletResponse response)
        throws IOException, ServletException {
    if (debug) {
        log("Filtro:DoAfterProcessing");
    }

    // Write code here to process the request and/or response after
    // the rest of the filter chain is invoked.

    // For example, a logging filter might log the attributes on the
    // request object after the request has been processed.
/*
    for (Enumeration en = request.getAttributeNames(); en.hasMoreElements(); ) {
    String name = (String)en.nextElement();
    Object value = request.getAttribute(name);
    log("attribute: " + name + "=" + value.toString());

    }
     */

    // For example, a filter might append something to the response.
/*
    PrintWriter respOut = new PrintWriter(response.getWriter());
    respOut.println("<P><B>This has been appended by an intrusive filter.</B>");
     */
}

/**
 *
 * @param request The servlet request we are processing
 * @param response The servlet response we are creating
 * @param chain The filter chain we are processing
 *
 * @exception IOException if an input/output error occurs
 * @exception ServletException if a servlet error occurs
 */
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse resp = (HttpServletResponse) response;
    HttpSession session = req.getSession();

    if (session.getAttribute("nivel") == "1") {
        chain.doFilter(request, response);
    } else {
        session.invalidate();
        resp.sendRedirect(req.getContextPath() + "/login.jsp");
    }
}

/**
 * Return the filter configuration object for this filter.
 */
public FilterConfig getFilterConfig() {
    return (this.filterConfig);
}

/**
 * Set the filter configuration object for this filter.
 *
 * @param filterConfig The filter configuration object
 */
public void setFilterConfig(FilterConfig filterConfig) {
    this.filterConfig = filterConfig;
}

/**
 * Destroy method for this filter 
 */
public void destroy() {
}

/**
 * Init method for this filter 
 */
public void init(FilterConfig filterConfig) {
    this.filterConfig = filterConfig;
    if (filterConfig != null) {
        if (debug) {
            log("Filtro:Initializing filter");
        }
    }
}

/**
 * Return a String representation of this object.
 */
@Override
public String toString() {
    if (filterConfig == null) {
        return ("Filtro()");
    }
    StringBuffer sb = new StringBuffer("Filtro(");
    sb.append(filterConfig);
    sb.append(")");
    return (sb.toString());
}

private void sendProcessingError(Throwable t, ServletResponse response) {
    String stackTrace = getStackTrace(t);

    if (stackTrace != null && !stackTrace.equals("")) {
        try {
            response.setContentType("text/html");
            PrintStream ps = new PrintStream(response.getOutputStream());
            PrintWriter pw = new PrintWriter(ps);
            pw.print("<html>\n<head>\n<title>Error</title>\n</head>\n<body>\n"); //NOI18N

            // PENDING! Localize this for next official release
            pw.print("<h1>The resource did not process correctly</h1>\n<pre>\n");
            pw.print(stackTrace);
            pw.print("</pre></body>\n</html>"); //NOI18N
            pw.close();
            ps.close();
            response.getOutputStream().close();
        } catch (Exception ex) {
        }
    } else {
        try {
            PrintStream ps = new PrintStream(response.getOutputStream());
            t.printStackTrace(ps);
            ps.close();
            response.getOutputStream().close();
        } catch (Exception ex) {
        }
    }
}

public static String getStackTrace(Throwable t) {
    String stackTrace = null;
    try {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        t.printStackTrace(pw);
        pw.close();
        sw.close();
        stackTrace = sw.getBuffer().toString();
    } catch (Exception ex) {
    }
    return stackTrace;
}

public void log(String msg) {
    filterConfig.getServletContext().log(msg);
}

}

Não consigo acessar a pagina, a tela fica branca. O que podemos fazer para corrigir este erro!?