Sessao JSF

Tenho uma aplicação em JSF que seta o ID de um usuário quando loga no sistema, o login é controlado pelo próprio tomcat com o Realm. O problema é quando a sessão expira, o ID do usuário fica null, causando erro em certas partes do programa que precisam do ID do usuário. Teria alguma forma de configurar no tomcat ou no JSF para quando a sessão expirar se o usuário tentar acessar qualquer parte do programa solicitar o usuário e senha novamente?

Obrigado!

Desculpe pedir denovo… mas não tem como fazer alguma coisa pelo web.xml ou tenho que fazer alguma coisa página por página para ver se o código do usuário ainda está na sessão?

Obrigado!

opa,

você pode criar um filtro, ou alguma coisa para isto. Mas pelo que eu saiba, você não precisa fazer isto, desde que a página que você está acessando já está em uma área protegida, o tomcat já encarrega do serviço.

:okok:

Eu vi um filtro para servlet

package br.com.javamagazine.jairelton1;

import java.io.IOException;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class FiltroSeguranca implements Filter {

      public void init(FilterConfig config) throws ServletException {

      }

      public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
            HttpSession session = ((HttpServletRequest)req).getSession();
            Usuario usuario = (Usuario)session.getAttribute("usuario");
            if(usuario==null){
                  session.setAttribute("msg","Você não está logado no sistema!");
                  ((HttpServletResponse)res).sendRedirect("../index.jsp");
            }else{
                  chain.doFilter(req, res);
            }
      }
 
      public void destroy() {

      }
}

e no web.xml:

      <filter>
            <filter-name>Filtro Seguranca</filter-name>
          <filter-class>br.com.javamagazine.jairelton1.FiltroSeguranca</filter-class>
      </filter>
      <filter-mapping>
            <filter-name>Filtro Seguranca</filter-name>
            <url-pattern>/admin/*</url-pattern>
      </filter-mapping>

O problema que esse não funciona no JSF, tenho que fazer alguma coisa diferente ou tem alguma configuração especifica para ser feita no tomcat? No momento quando a sessão expira ele seta o código do usuário para null e se ele acessa uma página que precisa desse código dá erro, queria que ele solicitasse login novamente.

Obrigado

Opa,

Mas este filtro independe se é em JSF, ou seja lá o que for… veja que ele funciona apenas para a pasta admin.

:okok:

Funcionou, era só um probleminha com o filter do myfaces…

Obrigado!