Problemas utilizando Filtros

Pessoal Boa tarde,

Na minha aplicação trato todos os erros(preenchimento obrigatorio de campo etc) dentro dos Form-Beans.
Neste, tenho meu login, no qual tem um usuário e senha e utilizo uma ãção que verifica o login e a senha juntamente ao UserDAO e verifica se existe o cara ou não.

O problemas é o seguinte, até ai ta tudo funcionando, se eu não preencher os campos ele tras as mensagens etc.

Agora estou colocando um filtro para verificar se existe a Session ou não do cara, para saber se ele está logado ou não, mas quando ele não está logado, não devolve para min os erros, na minha página não vem os erros conforme vinham antes.

O código inteiro funciona, só os erros que não vem como eu gostaria.

Seugue os códigos abaixo:

index.jsp

<%@page contentType="text/html; charset=iso-8859-1" language="java" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<html:html>
<title><bean:message key="site.title"/></title>
<link href="css/style.css" rel="stylesheet" type="text/css">
<body>

<div id="centro">
	<div id="login">
	  <p class="FontV3Bold">Acesso ao Sistema</p>
     <html:form action="/login" focus="user.login" method="post">
	    <table width="100%" border="0" cellpadding="0" cellspacing="0">
          <tr>
            <td class="FontV4"><div align="right"><span class="FontV1">Login</span>&nbsp;&nbsp;&nbsp;</div></td>
            <td><html:text styleClass="Campo2" property="user.login" /></td>
          </tr>
          <tr>
            <td class="FontV4"><div align="right"><span class="FontV1">Senha</span>&nbsp;&nbsp;&nbsp;</div></td>
            <td><html:text styleClass="Campo2" property="user.psw" /></td>
          </tr>
          <tr>
            <td colspan="2" class="FontV4"><div align="center"><span class="FontV2">
            </span></div></td>
          </tr>
          <tr>
            <td colspan="2" class="FontV4"><div align="center">
              <html:submit styleClass="Campo2">Enviar Dados</html:submit><br/>
              <html:errors property="login"/>
              <html:errors property="psw"/>
            </div></td>
          </tr>
        </table>
      </form>
      </html:form>
    </div>
</div>

</body>

</html:html>

login.java

package br.com.peoplemais.struts.action;

import javax.servlet.http.*;
import org.apache.struts.action.*;

import br.com.peoplemais.bean.User;
import br.com.peoplemais.dao.factory.DAOFactory;
import br.com.peoplemais.struts.form.LoginForm;

public class Login extends Action {

	public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		System.out.println("Algum usuário está tentando se logar");
		LoginForm loginForm = (LoginForm) form;
		User user = loginForm.getUser();
		User populaUser = null;
		
		DAOFactory daoFactory = DAOFactory.getFactory(DAOFactory.MYSQL);
		populaUser = daoFactory.getUserDAO().getUser(user.getLogin(), user.getPsw());
	
		if(populaUser != null){
			System.out.println("Usuário Aceito");
			return map.findForward("ok");
		}
		
		else {
			System.out.println("Usuário Iválido");
			return map.findForward("index.jsp");
		}
	}
	
	
	

}



LoginForm.java (form-bean)
package br.com.peoplemais.struts.form;

import javax.servlet.http.*;
import org.apache.struts.action.*;
import br.com.peoplemais.bean.User;

public class LoginForm extends ActionForm {

	private User user = new User();
	
	public User getUser(){
		return this.user;
	}

	@Override
	public ActionErrors validate(ActionMapping map, HttpServletRequest req) {
		
		ActionErrors erros = new ActionErrors();
		
		if(stringVazia(user.getLogin())){
			erros.add("login", new ActionMessage("error.textLogin"));
		}
		
		if(stringVazia(user.getPsw())){
			erros.add("psw", new ActionMessage("error.textPsw"));
		}

		return erros;
	}
	
	public boolean stringVazia(String s){
		return s == null || s.trim().length() == 0;
	}
}

FilterSessionRequest.java(filtro)

package br.com.peoplemais.servlet.filters;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;

import br.com.peoplemais.bean.User;

public class FilterSessionRequest implements Filter {

	private FilterConfig  filterConfig = null;
	
	public void init(FilterConfig filterConfig) throws ServletException {		
		this.filterConfig = null;
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		User user = new User();
		
		HttpServletRequest rq = (HttpServletRequest) request;
		HttpSession session = rq.getSession();
		
		HttpServletResponse rp = (HttpServletResponse) response;		
		
		if(session.getAttribute("user") == null){
			System.out.println("sem login");			
			request.getRequestDispatcher("/index.jsp").include(request, response);					
		}
		else{
			System.out.println("Com login");
			chain.doFilter(request, response);
		}
	}

	public void destroy() {
		// TODO Auto-generated method stub

	}

}

Se alguém tiver alguma solução para isso e também quiser comentar algo de errado que estou fazendo em meu código serei grato.

[]s
Eduardo Lima
eduardo@peoplemais.com.br

kra, edita esse post e coloca os fontes na tag
Assim dá pra entender melhor o código… Divide em blocos…
tipo:

<html>
</html>
public metodo() {
}

Senão não dá pra entender o código…

Já em relação á sua dúvida, o filtro vai simplesmente checar a sessão e mandar o kara para a tela de login.
Não vejo onde vc precisa de menssagem de erro!!

Tipo se ele tenta logar, na pagina de login, e falta algum campo vc manda os erros pra tela, certo?

O filtro serve pra ele não tentar acessar um recuro da aplicação se não estiver logado.
Então, tentou logar falta alguma coisa vem os erros…

Acessou alguma coisa sem estar logado apresente apenas a tela de login!!!

Agora o que vc pode fazer é passar algum parâmetro no filtro, para a Action de login entender que não há sessão ativa ou a sessão expirou…

Algo assim:

[code]httpResponse.sendRedirect(httpRequest.getContextPath()

  • “/login.do?expired=true”);[/code]

:arrow: Tenho um filtro na minha aplicação que faz exatamente isso, mas sem o parâmetro que no meu caso não era necessário!

[code]
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.com.sensorsistemas.Constants;
import br.com.sensorsistemas.vo.Usuario;

public class LoginFilter implements Filter {

FilterConfig	config			= null;
ServletContext	servletContext	= null;

public void init(FilterConfig filterConfig) throws ServletException {
	config = filterConfig;
	servletContext = config.getServletContext();
}

/**
 * Verifica se o usuario está logado
 */
public void doFilter(ServletRequest request, ServletResponse response,
		FilterChain chain) throws IOException, ServletException {
	
	HttpServletRequest httpRequest = (HttpServletRequest) request;
	HttpServletResponse httpResponse = (HttpServletResponse) response;
	HttpSession session = httpRequest.getSession();
	
	Object obj = session.getAttribute("usuario.key");
	
	Usuario usr = (Usuario) obj;
	
	if (usr == null) {
		
		httpResponse.sendRedirect(httpRequest.getContextPath()
				+ "/login.do");
	}
	else {
		chain.doFilter(request, response);
	}
}

public void destroy() {}

}[/code]

Ok amigo… Entendi a ideia…

Valew pela ajuda…

[]s

é so fazer

request.setAttribute("erroFiltro", "É necessário esta logado");

ai na login vc faz com jstl

&lt;script&gt;
  alert("${erroFiltro}");
&lt;/script&gt;