[resolvido]Dúvida sobre filtro de usuario com Struts

1 resposta
alciara

Gente, eu estou fazendo um filtro de usuário com o framewrk Struts, ateh o momento em que eu estava fazendo a autenticação no banco estava tudo certo, mas quando eu implementei o filtror, não consigo mais construir meu projeto, nem acesso nenhuma página

Meu arquivo web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <filter>
        <filter-name>FiltroAutenticacao</filter-name>
        <filter-class>FiltroAutenticacao</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FiltroAutenticacao</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
    <filter>
         <filter-name>FiltroAdministrativo</filter-name>
        <filter-class>br.com.fwsistemas.cirurgicaconfianca.filtro.FiltroAdministrativo</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FiltroAdministrativo</filter-name>
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>2</param-value>
        </init-param>
        <init-param>
            <param-name>detail</param-name>
            <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>paginaDeLogin.jsp</welcome-file>
    </welcome-file-list>
</web-app>

e minha classe filtro

package br.com.fwsistemas.cirurgicaconfianca.filtro;

import br.com.fwsistemas.cirurgicaconfianca.modelo.Usuario;
import java.io.IOException;
import java.util.logging.Filter;
import java.util.logging.LogRecord;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author FW
 */
public class FiltroAdministrativo implements Filter {

    public FiltroAdministrativo() {
    }

    public void init(FilterConfig filterConfig) {
    }

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        System.out.println("Aplicando filtro de autenticacao");
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
// busca indicador de que o usuario efetuou autenticacao
       Usuario usuario = (Usuario)req.getSession().getAttribute("usuario");
// se nao esta autenticado, pede autenticacao
       if (usuario == null) {
            System.out.println("FiltroAdministrativo:doFilter:usuario == null");
            res.sendRedirect("../formLogin.do");
        } else {
            System.out.println("FiltroAdministrativo:doFilter:usuario <> null");
            chain.doFilter(request, response);
        }
    }

e um exemplo do meu struts-config.xml

<action-mappings>
        <action path="/Welcome" forward="/welcomeStruts.jsp"/>

        <action path="/efetuaLogin" name="LoginForm" type="br.com.fwsistemas.cirurgicaconfianca.action.LoginAction">
        <forward name="erro" path = "/erro.jsp"/>
        <forward name= "ok" path ="/admin/paginaAdministrativa.jsp"/>
        </action>

    </action-mappings>

e esse eh o ERRO

Distribuição incremental do http://localhost:8084/CirurgicaConfianca completada
Reimplantando http://localhost:8084/CirurgicaConfianca incrementalmente
Inicialização em andamento...
start?path=/CirurgicaConfianca
FAIL - Application at context path /CirurgicaConfianca could not be started
C:\Users\FW\Documents\NetBeansProjects\CirurgicaConfianca\nbproject\build-impl.xml:582: O módulo não foi implementado.
FALHA NA CONSTRUÇÃO (tempo total: 1 segundo)
por favor , alguem pode me incicar a solução

1 Resposta

alciara

Mudei o Método doFilter de:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("Aplicando filtro de autenticacao"); HttpServletRequest req = (HttpServletRequest)request; Apostila Programação Web - Java Adaptada de Caelum Página 258 de 277 HttpServletResponse res = (HttpServletResponse)response; // busca indicador de que o usuario efetuou autenticacao String usuariop= (String)req.getSession().getAttribute("usuario"); // se nao esta autenticado, pede autenticacao if ( ( usuario == null ) &&( req.getRequestURI().indexOf("usuario") < 0 ) ) { // vai para pagina de login res.sendRedirect("paginaDeLogin.jsp"); } else { chain.doFilter(request, response); // aplica próximo filtro }

para

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) arg0;

        if(request.getSession().getAttribute("usuario") == null){
            arg0.setAttribute("erro", "Você não está logado!");
            RequestDispatcher rd = arg0.getRequestDispatcher("/paginaDeLogin.jsp");
            rd.forward(arg0, arg1);
        }
        arg2.doFilter(arg0, arg1);
    }

    public void destroy() {

    }
Criado 22 de abril de 2010
Ultima resposta 28 de abr. de 2010
Respostas 1
Participantes 1