Criando Filter para o Tomcat 5

3 respostas
C

Onde eu posso encontrar materias sobre Filter?
Por exemplo, filtro de autenticação onde a pessoa não pode entrar em uma pagina sem se logar.

Obrigado gente.

3 Respostas

C
C

Muito obrigado Rafael.

C

Bom dia Rafael, na minha aplicação estou usando JSF, quais seria as diferenção, pois essa aplicação esta em JSP.

Quando eu coloco o filtro no meu web.xml, gera o seguinte erro

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Cannot find FacesContext
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
	org.apache.jsp.login_jsp._jspService(login_jsp.java:108)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

javax.servlet.jsp.JspException: Cannot find FacesContext
	javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:405)
	com.sun.faces.taglib.jsf_core.ViewTag.doStartTag(ViewTag.java:105)
	org.apache.jsp.login_jsp._jspx_meth_c_view_0(login_jsp.java:123)
	org.apache.jsp.login_jsp._jspService(login_jsp.java:101)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.

O meus web.xml esta assim.

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <filter>
        <filter-name>MyFacesExtensionsFilter</filter-name>
        <filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class>
        <init-param>
            <param-name>maxFileSize</param-name>
            <param-value>20m</param-value>
        </init-param>
    </filter>
   <filter-mapping>
       <filter-name>MyFacesExtensionsFilter</filter-name>
       <url-pattern>/faces/*</url-pattern>
   </filter-mapping>
    
       <filter-mapping>
           <filter-name>MyFacesExtensionsFilter</filter-name>
           <url-pattern>*.jsp</url-pattern>
       </filter-mapping>
   
   <filter>
       <filter-name>Filtro Seguranca</filter-name>
       <filter-class>org.maternidade.sim.filter.FiltroSeguranca</filter-class>
   </filter>
      <filter-mapping>
          <filter-name>Filtro Seguranca</filter-name>
          <url-pattern>/faces/*</url-pattern>
   </filter-mapping>
   
    <context-param>
        <param-name>com.sun.faces.verifyObjects</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.validateXml</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/faces-config.xml</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
        <welcome-file-list>
            <welcome-file>
            login.jsp
            </welcome-file>
        </welcome-file-list>
</web-app>

Deixa eu lhe explicar como esta o meu código, não sei se estou fazendo uma arquitetura certa, pois nunca trabalhei com programação para web, mais vamos lá.

O botão de login da minha interface chama o método validarUsuario dessa classe, para verificar se existe o usuario no banco de dados.
Eu coloquei um atributo do tipo HttpServletRequest para setar a sessão para o usuario. Isso seria correto ?. Pois no exemplo esta dentro da classe Logar no metodo doPost.
Então como ficaria com essa arquitetura da minha aplicação.

package org.maternidade.sim.negocio;
import javax.servlet.http.HttpServletRequest;
import org.maternidade.sim.beans.*;

/**
 *
 * @author caraujo
 */
public  class actionFuncionario {
    
    //Objeto fachada para realizar lista, salvar funcinario etc
    FuncionarioFacade funFacade = new FuncionarioFacade();
    
    //Objeto Funcionario que deve ser manipulado
    private Funcionario funcionario = new Funcionario();
    
    //Interface request para criar as sessoes de acesso de usuario
    private HttpServletRequest req = null;
    
    /**
     * Creates a new instance of actionFuncionario
     */
    public actionFuncionario() {
    }
    
    public String validarFuncionario(){
        
        if(funFacade.validandoUser(getFuncionario())){
            
            req.getSession().setAttribute("funcionario",funcionario);
            return "acess";   
           
        }else{
            
            return "faild";
        }
        
    }

    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }
}

Agoro estou colocando o meu código da minha classe FachadaFuncinario.

public class FuncionarioFacade{
    
    //Objeto dao para {salvar,atualizar,remover um funcionario}
    private static CoreDao dao;
   
    //Retorna verdadeiro ou false na autenticacao do funcinario
    private boolean entrada;

    
    //Salva um funcionario
    public void saveFuncionario(Funcionario funcionario) {
        dao.save(funcionario);
    }
    
    //Valida a entrada do funcionario no sistema
    public boolean validandoUser(Funcionario funcionario){
        
        try {
            Criteria c = HibernateUtil.currentSession().createCriteria(Funcionario.class);
            c.add(Expression.eq("login",funcionario.getLogin()));
            Funcionario usr = (Funcionario)c.uniqueResult();
            
            if(usr == null){
                
                return false;
                
            }else{
                
                if(usr.getSenha().equals(funcionario.getSenha())){
                    setEntrada(true);
                    
                                                            
                }else{
                    setEntrada(false);
                }
                
            }
            
        } catch (Exception e) {
            System.err.print(e.getMessage());
        }
        
        return isEntrada();
    }

    public boolean isEntrada() {
        return entrada;
    }

    public void setEntrada(boolean entrada) {
        this.entrada = entrada;
    }
}

Que possui um Criteria para verificar se o usuario existe no banco, onde caso exista retorna true caso contrario false.

Criado 13 de março de 2007
Ultima resposta 15 de mar. de 2007
Respostas 3
Participantes 2