Dúvida sobre filtros

boa noite galera… é o seguinte: criei um filtro para fazer as permissões de usuários no acesso a determinadas páginas… dessa maneira, páginas de cadastro, alteração e exclusão só podem ser acessadas pelo administrador… então, coloquei nos url-patterns dos servlets as terminações .cad, .up e .del q só podem ser acessados pelo administrador… se o usuário não for administrador, é direcionado para a página inicial… porém, estou com problemas qdo são passados parâmetros via GET nessas páginas exclusivas do administrador… por exemplo: se um visitante pôr na url etcetc.del?id=1 ele é direcionado para a página inicial, porém o q tal visitante chato tinha a intenção de deletar é realmente deletado…

código do filtro:

public class AdministradorRequestFilter implements Filter {
    
    private FilterConfig filterConfig = null;
    
    public AdministradorRequestFilter() {
    }
    
    private void doBeforeProcessing(ServletRequest request, ServletResponse response)
    throws IOException, ServletException {
        if (debug) log("AdministradorRequestFilter:DoBeforeProcessing");
        
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        boolean ok = true;

        Boolean admin = (Boolean) req.getSession().getAttribute("admin");

        if (admin == null || !admin)
            req.getRequestDispatcher("/").forward(req, res);
    }
    
    private void doAfterProcessing(ServletRequest request, ServletResponse response)
    throws IOException, ServletException {
        if (debug) log("AdministradorRequestFilter:DoAfterProcessing");
    }
    
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {
        
        if (debug) log("AdministradorRequestFilter:doFilter()");
        
        doBeforeProcessing(request, response);
        
        Throwable problem = null;
        
        try {
            chain.doFilter(request, response);
        } catch(Throwable t) {

            problem = t;
            t.printStackTrace();
        }
        
        doAfterProcessing(request, response);
        
        //
        // If there was a problem, we want to rethrow it if it is
        // a known type, otherwise log it.
        //
        if (problem != null) {
            if (problem instanceof ServletException) throw (ServletException)problem;
            if (problem instanceof IOException) throw (IOException)problem;
            sendProcessingError(problem, response);
        }
    }

    public FilterConfig getFilterConfig() {
        return (this.filterConfig);
    }

    public void setFilterConfig(FilterConfig filterConfig) {
        
        this.filterConfig = filterConfig;
    }

    public void destroy() {
    }

    public void init(FilterConfig filterConfig) {
        
        this.filterConfig = filterConfig;
        if (filterConfig != null) {
            if (debug) {
                log("AdministradorRequestFilter:Initializing filter");
            }
        }
    }

    public String toString() {
        if (filterConfig == null) return ("AdministradorRequestFilter()");
        StringBuffer sb = new StringBuffer("AdministradorRequestFilter(");
        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);
    }
    
    private static final boolean debug = true;
}

mapeamento no web.xml:

    <filter-mapping>
        <filter-name>AdministradorRequestFilter</filter-name>
        <url-pattern>*.cad</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>AdministradorRequestFilter</filter-name>
        <url-pattern>*.del</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>AdministradorRequestFilter</filter-name>
        <url-pattern>*.up</url-pattern>
    </filter-mapping>

alguém sabe??

Esse código tá bem diferente do que você mandou pra lista do PBJUG.

pois eh… dei uma enxugada nesse filtro antes de enviar pra la… era aquilo q tu respondeu mesmo… tinha q fechar o fluxo do filtro de alguma forma antes do chain.doFilter()… eh q eu pensava q o forward do filtro tipo q anulava o do servlet… valeu ae!