Filtros no Struts 2

0 respostas
calel
Havia feito um filtro em servlet que abria e fechava conexão com o banco, mas no struts 2 meu filtro abre e fecha a conexão com o banco e só depois a action é chamada. Segui o mesmo padrão de quando usei servlets, talvez esse seja o erro, mas quando procurei algo sobre no struts só achei o pessoal falando de interceptadores =/
...
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*.do</url-pattern>
  </filter-mapping>
  
  <filter>
  	<filter-name>conexao</filter-name>
  	<filter-class>tarefas.filter.ConnectionFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>conexao</filter-name>
  	<url-pattern>/*.do</url-pattern>
  </filter-mapping>
...
package tarefas.filter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import tarefas.dao.ConnectionFactory;

public class ConnectionFilter implements Filter {
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {		
		Connection cnn = null; 
		System.out.println("Got Here! ");
		try {
			cnn = new ConnectionFactory().getConnection();
			request.setAttribute("cnn", cnn);
			chain.doFilter(request, response);
			//super.doFilter(request, response, chain);
			cnn.close();
			System.out.println("Fechou!!");
		} catch (SQLException e) {
			System.out.println(e.getMessage());
			throw new ServletException(e);
		}
	}

	@Override
	public void destroy() {	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {}
}
package tarefas.action;
import java.sql.Connection;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.testng.annotations.Parameters;
import com.opensymphony.xwork2.ActionContext;
import tarefas.dao.UsuarioDao;
import tarefas.modelo.Usuario;

public class AutorizadorAction {
	private Usuario usuario;
	private Connection cnn;

	@Action(value="login", results= {
			@Result(name="ok", type="redirectAction", 
					params={"actionName", "listaTarefas"}),
			@Result(name="invalido", location="/login.jsp")
			})
	public String login(){
		cnn =(Connection) ActionContext.getContext().get("cnn");
		System.out.println(" --- Conexão: " + cnn);
		UsuarioDao dao = new UsuarioDao();
		dao.setCnn(cnn);
		if(dao.existeUsuario(usuario)){
			ActionContext.getContext().getSession().put("usuarioLogado", usuario);
			return "ok";
		}else{
			return "invalido";
		}
	}
	public Usuario getUsuario() {return usuario;	}
	public void setUsuario(Usuario usuario) {this.usuario = usuario;}
	public void setCnn(Connection cnn) {this.cnn = cnn;}
}
Criado 4 de julho de 2010
Respostas 0
Participantes 1