Cancelar a Sessao

Boa tarde pessoal. Estou com um problema aqui e andei verificando aqui no GUJ e nao encontrei a solucao.
Tenho uma pagina que ela so é acessada apos efetuar um login. Isso é feito atraves de um Filtro. Depois tenho um link que envia a requisicao para uma Action que cancela essa sessao, ou seja, Logout. O Filter que precisa de um usuario funciona beleza na primeira requisicao. So que depois que o usuario da um logout e se ele entrar na pagina que necessita da sessao do usuario ele entra sem problemas, ou seja, o logout nao esta funcionando. Ja teitei usar invalidate(), removeAttribute(“usuario”) e nada. O que pode estar acontecendo? Veja o meu codigo.

Filter que verifica o usuario.

public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		
		HttpSession session = ((HttpServletRequest)req).getSession();
		Usuario user = (Usuario) session.getAttribute("usuario");
			
				
		if (user == null) {
			((HttpServletRequest)req).setAttribute("msg", "Senhor Usuario, voce nao esta logado, favor entrar com login e senha respectivos");
			RequestDispatcher view = ((HttpServletRequest)req).getRequestDispatcher("/pages/licitacao/Login.jsp");
			view.forward(req, resp);
		}  else{
			chain.doFilter(req, resp);
		}
			
			
	}

Action que coloca o usuario na sessao.

public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		
		ActionMessages message = new ActionMessages();
		LoginUsuarioForm loginForm = (LoginUsuarioForm) form;
		Usuario usuario = new Usuario();
		Usuario user = null;
		try {
			BeanUtils.copyProperty(usuario, "codigo", loginForm.getCodigo());
			BeanUtils.copyProperty(usuario, "senha", loginForm.getSenha());
			user = this.usuarioService.consultaPorCodigoSenhaUsuario(usuario);
			HttpSession session = request.getSession(true);
			session.setAttribute("usuario", user);
		} catch (Exception e) {
			message.add("error.consulta.login", new ActionMessage("error.consulta.login.user"));
			saveMessages(request, message);
			return mapping.findForward("failure");
		}
		if (user == null) {
			message.add("user.invalid", new ActionMessage("error.user.invalid"));
			saveMessages(request, message);
			
		} 
		if (message.isEmpty()){
			return mapping.findForward("success");
		} else {
			return mapping.findForward("userInvalido");
		}
			
		
		
		
	}

Agora a Action Logout…

[code]
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

	ActionMessages messages = new ActionMessages();
	HttpSession session = request.getSession(true);
	try {
		
		if (session.getAttribute("usuario") != null) 
			session.removeAttribute("usuario");
                            // tentei usar tambem session.invalidate() e tambem nao funcionou
		
		
	} catch (Exception e) {
		messages.add("session.invalid", new ActionMessage("session.message"));
		saveMessages(request, messages);
	}
	
	if (messages.isEmpty()) {
		return mapping.findForward("success");
	} else {
		return mapping.findForward("failure");
	}
	
}[/code]

Alguem pode me dar uma ajuda…

Obrigado…

tente assim:

session.invalidate();

:wink:

caro rlazoti .

Isso eu ja tinha tentado e mesmo assim nao deu certo.

Uma coisa que gostaria de ver com voces. O objeto que esta chamando a minha action Logout esta dentro de um mapeamento do frame em html. E o meu Action me direciona para a pagina principal do frame.
Sera que é por isso?

<body>
<div align="center"><img      />
  <map name="Map" id="Map">
    <area shape="rect" coords="514,26,552,39" href="index.html" target="_parent" />
    <area shape="rect" coords="50,92,157,112" href="LicitacoesPublicadas.do" target="principal" alt="Licita&ccedil;&otilde;es publicadas" />
    <area shape="rect" coords="186,93,308,113" href="PropostaLicitacoesAbertas.do" target="principal" />
    <area shape="rect" coords="345,91,423,110" href="LicitacoesDisputas.do" target="_blank" />
    <area shape="rect" coords="466,93,580,110" href="LicitacoesHomologadas.do" target="principal" />
    <area shape="rect" coords="608,93,701,113" href="LicitacoesConcluidas.do" target="principal" />
    <area shape="rect" coords="560,26,603,38" href="Administracao.jsp" target="principal" />
    <area shape="rect" coords="99,16,205,48" href="index.html" target="_parent" />
  <area shape="rect" coords="612,26,661,39" href="Logout.do" target="principal" alt="" /> // Aqui esta a chamada ao Logout.do
  <area shape="rect" coords="668,26,727,40" href="LanceVencedor.do" target="principal" alt="" />
  </map>
</div>

Ja tentei depurar a classe Action Logout mas nao entra. E o complicado que pelo menos pelo arquivo de configuracao do Struts ele direciona para a pagina correta.

Veja o mapeamento do arquivo.

[code]


[/code]

A classe Action

public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		ActionMessages messages = new ActionMessages();
		HttpSession session = request.getSession(true);
		try {
			
			if (session.getAttribute("usuario") != null) {
				session.setAttribute("usuario", null);
				session.invalidate();
			}
				
				
			
		} catch (Exception e) {
			messages.add("session.invalid", new ActionMessage("session.message"));
			saveMessages(request, messages);
		}
		
		if (messages.isEmpty()) {
			return mapping.findForward("success");
		} else {
			return mapping.findForward("failure");
		}
		
	}

Alguem tem ideia o pode ser? Obrigado