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…